本篇是 Python 系列教程第 18 篇,更多內容敬請訪問我的 Python 合集
1 開啟檔案
通常使用內建的 open(檔案路徑, 模式, encoding="utf-8")
函式。
- 檔案路徑:可以是相對路徑或絕對路徑。
- 模式:(可選)決定了檔案開啟後如何處理檔案。
- encoding:(可選)編碼方式。
常見的模式有:
- 'r' (預設):只讀模式,如果檔案不存在,則會引發 FileNotFoundError。
- 'w':寫入模式,如果檔案存在則會清空內容再寫入,如果檔案不存在則建立新檔案。
- 'a':追加模式,在檔案末尾追加內容,如果檔案不存在則建立新檔案。
- 'b':二進位制模式,用於處理二進位制檔案(如影像、音訊等)。
- '+':更新模式,用於同時進行讀寫操作。
可以將這些模式組合起來使用,例如:
- 'rb':以二進位制模式讀取檔案。
- 'wb':以二進位制模式寫入檔案。
- 'ab':以二進位制模式追加內容到檔案。
- 'r+':讀寫模式,可以讀取和寫入檔案。
- 'w+':寫入並讀取模式,先寫入後讀取。
- 'a+':追加並讀取模式,先追加後讀取。
2 檔案讀取
如果open()
函式執行成功,會返回一個檔案物件。後續可以對這個物件進行讀取或寫入操作。
f = open('./data.txt', 'r', encoding='utf-8')
檔案物件有個read()
方法,會一次性讀取檔案裡的所有內容,並返回字串格式。
例項:
file = open('data.txt', 'r', encoding="utf-8")
print(file.read())
注意:
- 如果呼叫過
read()
後再次呼叫,會返回空,因為程式會記錄檔案被讀取的位置,第一次read()
時已經讀到檔案末尾,第二次read()
後面就沒有內容了。 - 大檔案也不適合用
read()
,因為會一次性讀取檔案的所有內容,可能擠爆記憶體。
上面說大檔案不適合用read()
,那有別的替換方案嗎?當然有,解決方案就是一次性只讀取部分內容,如:
- 給
read()
傳一個數字引數如read(1024)
,表示一次讀多少位元組,下次再呼叫read(1024)
時就會繼續從上次的結束位置讀取。 - 使用
readline()
,此方法一次只會讀取一行內容,是根據換行符來判斷本行結尾的,而且換行符也會被當做內容的一部分被讀取。
上面的兩種方式可搭配while
迴圈來用,另外還有一個readlines()
方法,會一次性返回所有行,組成一個字串列表,一般搭配for
迴圈使用。
3 檔案寫入
呼叫open()
函式時第二個引數傳w
或a
就可以進行檔案寫入操作。這裡說明一點,如果第二個引數是r
,且檔案不存在就會報FileNotFoundError
錯誤,但是w
或a
就不會報錯,它會自動建立一個檔案。
在開啟或建立檔案之後就可以呼叫檔案物件的write()
方法進行寫入操作了。
示例:
with open('data.txt', 'w', encoding="utf-8") as file:
file.write("hello ")
file.write("python")
data.txt內容:
hello python
注意write()
方法並不會自動換行,需要手動新增換行符,如把程式碼改成file.write("hello\n")
,data.txt就會變成:
hello
python
如果我們使用w
模式,檔案就只能寫入不能讀取,如果我們想先讀取再寫入,可以用r+
模式
4 關閉檔案
檔案操作完畢後,檔案物件需要呼叫一個close()
方法關閉檔案釋放資源。
每次檔案操作完畢後都應該關閉檔案,但是有可能會粗心忘記關閉,怎麼辦呢?我們可以在呼叫open()
函式開啟檔案的時候使用with
關鍵字,然後用as
指定讀取到的檔案,這樣在with
程式碼塊執行完後檔案就會被自動關閉了,例項:
# 使用 with 語句來讀取檔案
with open('data.txt', 'r', encoding='utf-8') as file:
for line in file.readlines():
print(line.strip())