讀寫檔案就是請求作業系統開啟乙個檔案物件,然後通過系統提供的介面讀寫資料。
f = open(file, mode='r', buffering=-1, encoding=none, errors=none, newline=none, closefd=true, opener=none)
上述**獲取了乙個檔案物件f,注意操作結束後,要f.close()關閉檔案
file:檔案的路徑
mode:檔案開啟模式
常見的模式有
模式描述
b二進位制模式
r以唯讀方式開啟,指標放在檔案開頭
r+讀寫方式開啟,指標放在檔案開頭
rb已二進位制開啟乙個檔案,唯讀
rb+二進位制開啟乙個檔案,讀寫
w寫的方式開啟乙個檔案,如果檔案已經存在,則會被clear,如果不存在,會建立乙個檔案
w+讀寫的方式開啟乙個檔案,如果檔案已經存在,則會被clear,如果不存在,會建立乙個檔案
wb+讀寫的方式開啟乙個二進位制檔案,如果檔案已經存在,則會被clear,如果不存在,會建立乙個檔案
a追加的方式開啟檔案,如果檔案已存在,指標會放在檔案末尾,否則建立乙個檔案
a+追加的方式開啟檔案,如果檔案已存在,指標會放在檔案末尾,否則建立乙個檔案
ab+追加的方式開啟二進位制檔案,如果檔案已存在,指標會放在檔案末尾,否則建立乙個檔案
buffering:設定緩衝
encoding:編碼格式
errors:報錯級別
newline:區分換行符
closefd:傳入file引數
a. f.write(str1) 將字串寫入檔案,返回的是寫入的字元長度
b.f.writelines(list1) 寫入乙個字串列表
寫檔案時,內容會先到緩衝區,等待系統空閒或者close時才會寫入到檔案中,推薦with的寫法
l1 = [u'測試\n
', '
test\n
'] #
需要新增換行符
f1.writelines(l1)
a.f.read(size) 讀指定位元組的內容,預設讀取檔案所有內容。注意讀取到的指是str型別,如果需要運算要先進行轉換。
b. f.readline() 讀取一行,包括換行符
c. f.readlines(sizeint) 讀取所有行,並且返回列表。若給定sizeint>0,返回總和大約為sizeint位元組的行, 實際讀取值可能比 sizeint 較大, 因為需要填充緩衝區
f.tell() 返回指標當前位置
f.seek(offset[,whence]) 移動指標到指定位置,
offset 偏移量,可以是負,代表從後向前移動
whence 偏移相對位置,0 開頭位置 1 當前位置 2 檔案結尾位置
例如 seek(x, 0) 從開始位置位移x
seek(x, 1) 從當前位置向後位移x
seek(-x, 2) 從結尾位置向前位移x
f.truncate(size) (存疑)從檔案的首行首字元開始截斷,截斷檔案為 size 個字元,無 size 表示從當前位置截斷;截斷之後後面的所有字元被刪除,其中 windows 系統下的換行代表2個字元大小。
如果檔案不存在,open()函式會丟擲乙個ioerror異常錯誤。
其他異常待補充
python每日一練
人生苦短,我用python 2018.6.5 有個目錄,裡面是你自己寫過的程式,統計一下你寫過多少行 包括空行和注釋,但是要分別列出來 coding utf 8 import re import glob defcodecolletion path filelist glob.glob path p...
Python每日一練
人生苦短,我用python 2018.6.13 最近事情有點多,有幾天沒寫了,正好最近需要統計一下各組排名,也就拿python代替手工了 各組給出其他組的排名,統計每個組最終的得分,第一名為0.5,第二名0.4,以此類推。coding utf 8 groups 3,2,5,4,6 1,3,5,6,4...
Python每日一練0002
如何序列化輸出元素包含字串元組的字串元組 好繞 舉個例子 zoo1 monkey elephant zoo2 python zoo1 將zoo2輸出為python,monkey,elephant容易想到使用join 函式,但join 函式要求元素必須都是字串型別,否則會丟擲typeerror錯誤 z...