python內建了讀寫檔案的函式open()
f = open('/users/michael/test.txt', 'r')
『r』 表示讀,我可以可以利用這個方法開啟乙個檔案,如果檔案不存在,會丟擲乙個ioerror的錯誤,並且給出錯誤碼和詳細資訊告訴你檔案不存在。如果檔案開啟成功,我們接下來就要讀檔案操作了
f.read()
'hello, world!'
read函式可以一次性讀取檔案全部內容,如果檔案內容不大的話,適合使用這個函式一次性讀取全部內容
f.next() 逐行讀取資料,和f.readline() 相似,唯一不同的是,f.readline() 讀取到最後如果沒有資料會返回空,而f.next() 沒讀取到資料則會報錯
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'刪掉
呼叫close()
方法關閉檔案。檔案使用完畢後必須關閉,因為檔案物件會占用作業系統的資源,並且作業系統同一時間能開啟的檔案數量也是有限的
f.close()
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
with open('/path/to/file', 'r') as f:
print(f.read())
像open()
函式返回的這種有個read()
方法的物件,在python中統稱為file-like object。除了file外,還可以是記憶體的位元組流,網路流,自定義流等等。file-like object不要求從特定類繼承,只要寫個read()
方法就行。
stringio
就是在記憶體中建立的file-like object,常用作臨時緩衝。
b'\xff\xd8\xff\xe1\x00\x18exif\x00\x00...' # 十六進製制表示的位元組
>>> f = open('/users/michael/gbk.txt', 'r', encoding='gbk')
>>> f.read()
'測試'
unicodedecodeerror,編碼不規範的檔案,文字檔案中可能夾雜了一些非法編碼的字元。遇到這種情況,open()
函式還接收乙個errors
引數,表示如果遇到編碼錯誤後如何處理。最簡單的方式是直接忽略:
f = open('/users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
寫檔案和讀檔案是一樣的,唯一區別是呼叫open()
函式時,傳入識別符號'w'
或者'wb'
表示寫文字檔案或寫二進位制檔案:
>>> f = open('/users/michael/test.txt', 'w')
>>> f.write('hello, world!')
>>> f.close()
可以反覆呼叫write()
來寫入檔案,但是務必要呼叫f.close()
來關閉檔案。當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有呼叫close()
方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。(f.flush() 將修改寫入到檔案中(無需關閉檔案)),忘記呼叫close()
的後果是資料可能只寫了一部分到磁碟,剩下的丟失了。所以,還是用with
語句來得保險:
with open('/users/michael/test.txt', 'w') as f:
f.write('hello, world!')
使用r+ 模式不會先清空,但是會替換掉原先的檔案,如果在寫之前先讀取一下檔案,再進行寫入,則寫入的資料會新增到檔案末尾而不會替換掉原先的檔案。這是因為指標引起的,r+ 模式的指標預設是在檔案的開頭,如果直接寫入,則會覆蓋原始檔,通過read() 讀取檔案後,指標會移到檔案的末尾,再寫入資料就不會有問題了。這裡也可以使用a 模式
>>> f2 = open('/tmp/test.txt','r+')
>>> f2.read()
'hello girl!'
>>> f2.write('\nhello boy!')
>>> f2.close()
[root@node1 python]# cat /tmp/test.txt
hello girl!
hello boy!
f.writelines() 多行寫入
>>> l = ['\nhello dear!','\nhello son!','\nhello baby!\n']
>>> f = open('/tmp/test.txt','a')
>>> f.writelines(l)
>>> f.close()
[root@node1 python]# cat /tmp/test.txt
hello girl!
hello boy!
hello man!
hello dear!
hello son!
hello baby!
python 讀寫檔案 open
io 檔案讀寫 讀 f open users panbingqing desktop test a.rtf 讀模式,不可做任何修改 將整個檔案內容讀取為乙個字串值,使用read 方法 f1 f.read or use readlines 將整個檔案讀取為列表 f2 f.readlines type ...
Python 讀寫文字(open)
character meaning r open for reading default w open for writing,truncating the file first a b binary mode t text mode default open a disk file for upd...
python檔案讀寫操作 內建open 函式
python中的open 方法是用於開啟乙個檔案,如果該檔案損壞或者無法開啟,會丟擲 oserror 完整語法格式 open file,mode r buffering none,encoding none,errors none,newline none,closefd true open 函式常...