如何在 Python 中處理文件
已發表: 2022-03-11在任何編程語言中,文件處理都是一個重要方面。 Python 還支持以不同的模式處理文件,例如讀取和寫入文件等等。
在本教程結束時,您將能夠:
- 在 Python 中打開和讀取文件,
- 從文本文件中讀取行,
- 寫入並附加到文件,以及
- 使用上下文管理器在 Python 中處理文件。
如何在 Python 中讀取文件
要在 Python 中打開文件,可以使用通用語法: open('file_name','mode')
。
- 這裡,
file_name
是文件的名稱。
注意:如果您要打開的文件在當前工作目錄中,您可以只提及文件名。 如果它位於您工作環境中的另一個文件夾中,您應該包含該文件的路徑。
- 參數
mode
指定您想要打開文件的模式。
打開文件的默認模式是讀取——用字母
'r'
表示。 但是,建議明確指定模式。
在開始之前,讓我們看一下文件lib.txt
,我們將在此示例中使用它。
從此 GitHub 存儲庫下載本教程中使用的文本文件和代碼。

下面的代碼片段顯示瞭如何使用open()
函數在 Python 中打開文本文件'lib.txt'
並讀取其內容。
file = open('lib.txt','r') contents = file.read() print(contents) file.close() # Output Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
在上面的例子中,
-
open()
函數返回一個文件對象,我們選擇將其命名為file
。 - 接下來,我們在
file
上調用read()
方法。 - 變量
contents
現在包含文件的內容。 我們打印出來。 - 最後,我們關閉文件。
但是,如果您忘記關閉文件,則可能會浪費資源。 如果您正在處理大量此類文件,則可能會佔用大量內存。 這是因為您已經打開了多個文件,但沒有關閉其中的任何一個。
現在,讓我們學習一種更好的打開文件的方法 上下文管理器。 下面的代碼片段顯示瞭如何使用它們。
with open('lib.txt','r') as f: contents = f.read() print(contents)
使用聯繫人管理器處理文件時,您不必使用close()
方法。 I/O 操作完成後文件會自動關閉。
如何在 Python 中從文件中讀取行
在我們的示例文本文件中,我們只有幾行。 因此,一次讀取所有文件內容不是問題。

但是,當您需要讀取大文件時,使用read()
方法,如上所示,可能效率不高。
事實上,如果文本文件非常大,您可能很快就會耗盡內存。 這就是為什麼您可能希望從文本文件中讀取只讀行的原因,您將在本節中學習如何執行此操作。
使用 Python 的 readline() 方法從文件中讀取行
readline()
方法從文件中一次讀取一行。
運行以下代碼片段。
with open('lib.txt','r') as f: line = f.readline() print(line) line = f.readline() print(line) # Output Hello, there! Here are a few helpful Python libraries:
可以看到,在第一次調用readline()
方法之後,文件中的第一行被打印出來了。 第二次調用readline()
方法返回文件中的第二行。
這是因為,在第一個方法調用之後,文件指針位於第二行的開頭。
在 Python 中,您可以使用
tell()
方法來獲取文件指針的當前位置。 並且要將文件指針移動到特定位置,可以使用seek()
方法。
在下面的代碼片段中,我們在第一個方法調用之後使用f.seek(0)
。 這會將文件指針移動到文本文件的開頭。 這就是為什麼兩次都打印出文件中的第一行的原因。
with open('lib.txt','r') as f: line = f.readline() print(line) f.seek(0) line = f.readline() print(line) # Output Hello, there! Hello, there!
使用 Python 的 readlines() 方法從文件中讀取行
還有另一種密切相關的方法稱為readlines()
。
當您運行以下代碼片段時,您會看到readlines()
方法返回文件中所有行的列表。
with open('lib.txt','r') as f: lines = f.readlines() print(lines) # Output ['Hello, there!\n', 'Here are a few helpful Python libraries:\n', '1) NumPy\n', '2) pandas\n', '3) matplotlib\n', '4) seaborn\n', '5) scikit-learn\n', '6) BeautifulSoup\n', '7) Scrapy\n', '8) nltk\n', '9) Bokeh\n', '10) statsmodels\n', '\n']
使用 Python 的 for 循環從文件中讀取行
為了從文本文件中讀取行,您還可以使用for
循環。

一旦你有了一個文件對象,你就可以使用for
循環遍歷文件的內容——一次一行並打印出來,如下所示。 注意我們一次只訪問一行而不是讀取整個文件的內容。
with open('lib.txt','r') as f: for line in f: print(line, end='')
注意:當使用 Python 的
print()
函數時,默認分隔符是換行符'\n'
字符。 但是在原始文件中,我們沒有這些新行。 因此,將分隔符參數設置為空字符串:end = ''
以便按原樣打印文件的內容。
如何在 Python 中從文件中讀取內容塊
在 Python 中,您還可以選擇以小塊的形式讀取文件的內容。
閱讀下面的代碼:
- 在這裡,我們將
chunk_size
設置為50
。 這意味著文件中的前 50 個字符將被讀入,我們也將它們打印出來。
- 現在,在文件對象
f
上調用tell()
方法。 您可以看到文件指針現在位於位置 51 — 這與預期的一樣。
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk) current = f.tell() print(f"Current position of file pointer: {current}") # Output Hello, there! Here are a few helpful Python librar Current position of file pointer: 51
您還可以使用此技術以小塊的形式讀取整個文件。
以下代碼片段顯示瞭如何執行此操作。
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk,end='') while(len(chunk)>0): chunk = f.read(chunk_size) print(chunk,end='') # Output Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
在這裡,我們使用while
循環來讀取文件的內容。 我們以 50 大小的塊讀取文件的內容,直到到達文件末尾。
如何在 Python 中寫入文件
為了在 Python 中寫入文本文件,您應該以寫入模式打開它——指定'w'
。

下面的代碼片段顯示瞭如何做到這一點。
with open('new_file.txt','w') as f: f.write('Hello, Python!')
您會看到'new_file.txt'
已在您的工作目錄中創建。
現在,再次運行上面的代碼單元。
在您的終端中運行以下命令:
cat new_file.txt # Output: Hello, Python!
理想情況下,我們已經寫入文件兩次。 所以Hello, Python!
應該打印兩次吧?
但是您會看到它只打印了一次。 嗯,這是因為當您以write ( w
) 模式打開文件時,您基本上會用新內容覆蓋文件的內容。
如果您想在不覆蓋現有內容的情況下添加到文件末尾,則應以附加模式打開文件。 您將在下一節中看到如何做到這一點。
如何在 Python 中追加到文件
如果您想將內容附加到文件而不覆蓋,請在附加模式下打開它。
為此,請使用 ` 'a'
- a for append - 並明確指定模式。
接下來,運行以下代碼單元兩次。
with open('new_file.txt','a') as f: f.write('Hello, Python!')
注意文本現在是如何打印兩次的,因為我們附加到文件中。
cat new_file.txt # Output: Hello, Python!Hello, Python!
結論
讓我們快速總結一下我們在本教程中討論的內容。
- 您已經了解了常見的文件 I/O 操作,例如讀取、寫入和附加到文件。
- 此外,您還學習瞭如何使用seek()方法將文件指針移動到特定位置,以及
- 如何使用tell()方法檢索文件指針的當前位置。
我希望您發現本教程對您有所幫助。 既然您已經學習瞭如何在 Python 中處理文本文件,那麼請學習如何在 Python 中處理 JSON 文件。
有關的:
分 3 步檢查 Python 中列表的長度。