圖書推薦:《Python大學實用教程》
最適合零基礎入門讀物
在文中,我們將研習如何用Python讀取文件,然後,向文件寫入內容並再次保存它。使用Python讀寫某種特別類型的文件,例如:JSON、CSV、Excel等,一般會有專門的模塊。但是,在這裡,我們將用Python打開文本文件(.txt)。
若使用Python的open函數,它將返回一個文件對象,此對象將包含一些方法和屬性。我們可以使用這些方法和屬性獲得已打開文件的相關信息,並且,可以使用這些方法來更改所打開的文件。
用 open()讀取文件
在本節中,我們將學習如何使用open()函數在Python中加載文件,最簡單的例子是打開一個文件並創建一個文件對象。
當使用Python的open()函數打開一個文件時,有若干個參數可用。然而,最常用的參數只有前兩個。注意,第一個是強制性的,其餘的是可選的。如果不添加mode參數,文件將在Python中以只讀模式打開。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
mode參數
讀取文件有不同模式。如前所述,如果不帶有mode參數,文件就會以只讀方式打開,如下所示,列出了常用的幾種打開模式。
其中,mode='r'表示只讀;mode='w'表示只寫;mode='a'表示追加。mode='r+'表示可讀寫,但是文件必須存在,否則報錯。
一個簡單的示例
在下面的代碼示例中使用open()代開一個文件,此處假設文件與Python腳本在同一個目錄中,否則要增加路徑。
exfile = open('example_file')print(exfile)
在上圖中,很明顯我們有一個以只讀模式打開的文件對象,在open()中除了文件名之外沒有任何其他參數。因此,無法向該文件寫入任何內容。如果要列印文件名,只需鍵入print(exfile.name)。
創建文本文件並寫入內容
下面使用open()創建一個新文件。現在,要使用mode='w'參數,這樣能夠打開一個文件對象,並可以使用「文件對象寫入」方法。
exfile = open('example_file2', 'w')print(exfile)
在上圖中,可以當前文件對象是寫入模式(' w '),在下面的代碼塊中,我們將向這個文件中添加一行文本:
exfile.write('This is example file 2 \n')
當然,也可以添加更多的行:
exfile.write('Line number 2, in example file 2')exfile.close()
注意,在最後一行務必要使用close() 關閉文件。在下圖中,我們可以看到用Python創建的示例文件。
如何使用open()讀取Python中的文本文件
在下一個用Python讀取文件的示例中,我們將學習如何在Python中打開文本文件(.txt)。當然,這很簡單,我們基本上已經掌握了如何使用Python實現這一目的。也就是說,如果我們只想在Python中讀取.txt文件,我們可以使用open函數和read模式:
txtfile = open('example_file.txt')
read()示例
這個操作很簡單。現在,如果我們想列印文本文件的內容,可以有三個方法。第一個,使用文件對象的read()方法,讀取整個文件內容。也就是說,用txtfile.read()可以得到以下輸出:
第二個是用readlines()將文件讀取到列表中:
txtfile = open('example_file.txt') print(txtfile.readlines())
在這個方法中,還可以使用通過提供參數,說明讀取某些行。例如,下面的代碼將把前兩行讀入,然後將其列印出來:
txtfile = open('example_file.txt')line = txtfile.readlines(1)print(line)line2 = txtfile.readlines(2)print(line2)
最後一個方法,通過循環方式,把文件的內容逐行列印出來:
txtfile = open('example_file.txt')for line in txtfile: print(line)
寫入文件內容
在示例中,打開一個.txt文件,並向其中以追加的方式增加內容,故需要用'a'模式打開。
open('example_file2.txt', 'a')
接下來,使用write()向其追加內容。
txtfile.write('\n More text here.')
在添加文本時,至少在Windows 10中,必須在行前添加\n。否則,新的一行將添加到最後一個字符的後面(在文件的最後一行)。如果我們要添加更多的行,也必須記住這樣操作;
txtfile.write(『\nLast line of text, I promise.)txtfile.close()
可以使用文本編輯器(例如,Notepad, Gedit)打開文本文件,會看到添加的最後兩行:
使用with語句
使用with語句打開文件是一個非常好的習慣,這樣就不必記住關閉文件,並且使用with語句的語法清晰易讀:
with open('example_file2.txt') as txtfile2: print(txtfile2.read())
現在,如果我們使用read()方法,Python會拋出ValueError:
txtfile2.read()
分詞和統計
在讀取文件後,可以使用字符串的split()方法將文本文件中的句子分割成單詞,然後用collections模塊中的Counter類來統計打開的文件中的單詞數量。
from collections import Counterwith open('example_file2.txt') as txtfile2: wordcount = Counter(txtfile2.read().split())print(len(wordcount))# Output: 43
現在,Counter類返回了一個字典,該字典包含所有單詞和每個單詞出現的次數。因此,可以這樣來列印所有單詞和單詞總數:
for k in sorted(wordcount, key=wordcount.get, reverse=True): print(k, wordcount[k])
在上面的代碼示例中,我們循環遍歷字典中的鍵並對它們進行排序。這樣,就把最常見的詞排在最上面。當然,如果用Python讀取包含多個單詞的文件、並像這樣列印結果,這種操作就是不可行的。
以上介紹了以不同的模式讀取文件、創建和寫入文件、將數據追加到文件的方法,以及如何使用with語句讀取文件。