Python中open讀寫檔案操作

2021-09-28 20:05:42 字數 3055 閱讀 8044

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 函式常...