如何在 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 中從文件中讀取行

在我們的示例文本文件中,我們只有幾行。 因此,一次讀取所有文件內容不是問題。

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'

python寫入文件

下面的代碼片段顯示瞭如何做到這一點。

 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 中列表的長度。