python —— I/O

來源:互聯網
上載者:User

標籤:出現   div   代碼   使用   儲存空間   one   調用   文法   write   

CPU構成:運算器:完成各種算數運算、邏輯運算、資料轉送等資料加工處理控制器:控製程序的執行儲存空間:用於記憶程式和資料,例如記憶體輸入裝置:將資料或者程式輸入到電腦中,例如:鍵鼠輸出裝置:將資料或者程式處理結果展示給使用者 例如:顯示器、印表機等一般I/O操作,指的是檔案IO,若是網路IO會直接稱呼網路IO檔案IO常用操作:Open :開啟Read :讀取write:寫入close:關閉readline: 行讀取readlines:多行讀取seek:檔案指標操作tell:指標位置open(file, mode=’r’, buffering = -1, encoding= None, errors = None, newline = None, closefd = Ture, opener = None)開啟一個檔案,返回一個檔案(流)對象和檔案描述符。開啟檔案失敗則返回異常F = open(‘test’) #file對象  -> 開啟test檔案f.read() 讀檔案f.close() 關閉檔案檔案的訪問模式有兩種: 文字模式和二進位模式不同模式下,操作函數不盡相同,表現的結果也不一樣Open參數:file:開啟或者要建立的檔案名稱,如果不指定路徑,預設當前工作路徑(相對路徑)Mode —> 模式:#r 模式-> 可讀不可寫f = open(‘test‘) f.read()f.write(‘abc‘)#不可寫f.close()f = open(‘test‘, ‘r‘)#使用r 唯讀方式 不可寫f.write(‘abc‘)f.close()#開啟一個不存在的檔案 報錯f = open(‘test1‘, ‘r‘) #w 模式f = open(‘test‘, ‘w‘)f.write(‘ccc‘)f.close()>>>cat test>>> ccc#在使用一次寫入功能 直接覆蓋test為空白f = open(‘test‘, mode = ‘w‘)f.close()>>> cat test>>>#w 可以直接建立個test1 寫入‘123‘f = open(‘test1‘, mode=‘w‘)f.write(‘123‘)f.close()>>>cat test1>>>123%open預設是唯讀模式r開啟已經存在的檔案。r:唯讀開啟檔案,如果使用write方法,拋異常如果檔案不存在,拋FileNotFoundError異常w:唯寫方式開啟,讀取則拋異常檔案不存在,可以直接建立檔案如果檔案存在,清空檔案內容-----------------------------------------------x:檔案不存在,建立檔案,只可寫入檔案存在,拋出FileExistsError異常f = open(‘test2‘, ‘x‘)f.read()f.write(‘abcd‘)f.close()>>>cat test2>>>abcdf = open(‘test2‘, ‘x‘)a:檔案存在,可寫可開啟,追加內容檔案不存在,則建立後,可寫可開啟,追加內容f = open(‘test3‘, ‘a‘)f.read()f.write(‘zzzzzzz‘)f.close()>>cat test3>>>zzzzzzzf = open(‘test4‘, ‘a‘)f.wirte(‘test4‘)f.close()>>>cat test4>>>test4總結:r是唯讀,wxa都是唯寫wxa都可以產生新檔案。w不管檔案存在與否,都會產生全新內容的檔案a不管檔案是否存在,都能在開啟的檔案尾部追加內容x必須要求檔案事先不存在,自己建立一個新檔案文字模式 t:字元流,將檔案的位元組按照某種字元編碼理解,按照字元操作。open預設mode是rt二進位模式 b:位元組流,將檔案按照位元組理解,與字元編碼無關。二進位模式操作時,位元組操作使用bytes類型f = open(‘test‘, ‘wb‘)f.write(‘abc測試‘.encode())f.close()f = open(‘test‘)f.read(3)>>>bc測f.read(1)>>>af.close()f = open(‘test‘, ‘rb‘)f.read(1)>>>‘a‘f.read(3)>>>‘bc\xe6‘f.close()--------------------------------------------------f = open(‘test‘, ‘r+‘)f.write(‘abc123‘)f.read()f.close()f = open(‘test‘, ‘w+‘)f.write(‘abc123‘)f.read()f.close()f = open(‘test‘, ‘a+‘)f.write(‘abc123‘)f.read()f.close()f = open(‘test2‘, ‘x+‘)f.write(‘abc123‘)f.read()f.close()以上f.read都為空白,但是cat可以顯示內容+:為r/w/a/x 提供缺失的讀寫功能(缺讀給讀,缺寫給寫),但是,擷取檔案對象依舊按照r/w/a/x自己的特徵。+ 不能單獨使用,可以認為它是為前面的模式字元做增強功能的。檔案指標:指向當前位元組位置mode = r  指標起始在0mode = a  指標起始在EOF(檔案末尾)tell() 顯示指標當前位置seek(offset[,whence])移動檔案指標位置。offset 位移x個位元組文字模式下:whence 0 預設值,表示從頭開始,offset只能正整數whence 1 表示從當前位置開始, offset 只接受0whence 2 表示從EOF開始,offset只接受0test4 = (‘test4‘)f = open(‘test4‘, ‘r+‘)f.tell() #起始  0f.read() #‘test4‘f.tell() # EOF  5f.seek(0)# 0f.read() # test4f.seek(2,0) # 2f.read()#st4f.seek(2,0) #st4f.seek(2,1) #Error offset 只能為0f.seek(2,2)#Error offset 只能為0f.close()中文f = open(‘test4‘, ‘w+‘)f.write(‘測試‘)f.tell() #6f.close()f = open(‘test4‘, ‘r+‘)f.read(3)#‘測試‘f.seek(1)#1f.tell()#1f.read()#Errorf.seek(2)#2f.close()文字模式支援從開頭向後位移的方式二進位模式:whence 0 預設值,表示從頭開始,offset只能正整數whence 1 表示從當前位置開始,offset可正負whence 2 表示從EOF開始,offset可正負f = open(‘test4‘, ‘rb+‘)f.tell() #0f.read()#b‘\xe6\xb5\x8b\xe8\xaf\x95‘f.tell() #6f.write(b‘abc‘)f.seek(0)#0f.seek(2,1)#2f.read()#b‘\x8b\xe8\xaf\x95abc‘f.seek(-2,1)#7f.seek(2,2)#9f.seek(0)#0f.seek(-2,2)#f.read()#‘bc‘f.seek(-20,2)#Error  Invaild argumentf.close()buffering:緩衝區     -1 表示使預設值大小的buffer,如果是而精緻模式,使用io.defaults_buffer_size值,預設是4096或者8192如果是文字模式,如果是終端裝置,是行緩衝方式,如果不是則使用二進位的策略  0隻在二進位模式使用,表示管buffer  1隻在文字模式使用,表示使用行緩衝,意思就是見到分行符號flush  大於1 用於指定buffer的大小buffer緩衝區: 緩衝一個記憶體空間,一般來說是一個FIFO隊列,到緩衝區滿了或者達到閾值,資料才會flush到磁碟flush()  將緩衝區資料寫入磁碟close() 關閉前會調用flush()io.DEFAULT_BUFFER_SIZE 預設緩衝區大小,位元組>>>import io>>>io.DEFAULT_BUFFER_SIZE>>>8192buffering = -1  t和b,都是io.DEFAULT_BUFFER_SIZEbuffering = 0b 關閉緩衝區,t不支援buffering = 1b 就一個位元組,t行緩衝,遇到分行符號才flushbuffering > 1b模式表示緩衝大小。緩衝區的值可以超過io.DEFAULT_BUFFER_SIZE,直到設定的值超出後才把緩衝區flush。t模式,是io.DEFAULT_BUFFER_SIZE,flush完成後把當前字串也寫入磁碟總結:1、文字模式,一般都用預設緩衝區大小2、二進位模式,是一個個位元組的操作,可以指定buffer的大小3、預設緩衝區大小是個比較好的選擇,除非明確的知道,否則不調整4、明確知道需要寫磁碟,都會手動調用一次flush,而不是等到自動flush或者close的時候上下文管理:ulimit -a查看所有限制,其中open files就是開啟檔案數的限制,預設1024異常處理:當出現異常的時候,攔截異常,但是因為很多代碼都可能出現oserror異常,不好判斷異常,是因為資源限制產生的f = open(‘test‘)try:     f.write(‘abc‘)     #檔案唯讀,寫入失敗finally:     f.close()     #正確做法使用finally可以保證開啟的檔案可以被關閉上下文管理,一種特殊的文法,交給解譯器取釋放檔案對象使用with...as關鍵字上下文管理的語句塊並不會開啟新的範圍with語句塊執行完的時候,會自動關閉檔案對象def fwith open(‘test‘)as f:     f.write(‘hello‘)     #檔案唯讀,寫入失敗f.closed(測試f是否關閉) 

  

python —— I/O

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.