使用 Python 分割文字檔案的最快方法是什麼?


使用 Python 分割文字檔案可以透過多種方式實現,具體取決於檔案的大小和所需的輸出格式。在本文中,我們將討論使用 Python 分割文字檔案的最快方法,同時考慮程式碼的效能和可讀性。

split() 方法

分割文字檔案最直接的方法之一是使用 Python 中內建的 split() 函式。此函式基於指定的定界符將字串拆分為子字串列表。

例如,以下程式碼按換行符分割文字檔案並返回行列表:

with open('file.txt', 'r') as f:
   lines = f.read().split('\n')

這裡,

  • 內建的 split() 函式按換行符分割文字檔案並返回行列表。

  • 程式碼首先使用 open() 函式以 'r' 模式(表示讀取)開啟檔案。這將返回一個檔案物件,並將其儲存在變數 f 中。

  • 接下來,使用 read() 方法對檔案物件進行操作,將檔案的全部內容讀取到記憶體中,作為一個單一的字串。

  • 然後,對該字串呼叫 split() 函式,並將換行符 \n 作為分隔符傳遞。這將字串拆分為子字串列表,其中每個子字串對應於原始檔案中的一個行。最後,結果儲存在變數 lines 中。

readline() 方法

前面提到的方法簡單易讀,但對於大型檔案來說可能速度較慢,因為它會在分割之前將整個檔案讀取到記憶體中。如果您正在處理大型檔案,則可能需要考慮改用 readline() 方法,該方法每次讀取一行。

with open('file.txt', 'r') as f: lines = [] for line in f: lines.append(line)

從示例中,

  • 程式碼以與前面示例相同的方式開啟檔案。

  • 然後我們建立一個名為 lines 的空列表。接下來,我們使用 for 迴圈迭代檔案物件。

  • 在 for 迴圈內,對檔案物件呼叫 readline() 方法,該方法每次從檔案中讀取一行並將其賦值給變數 line。然後將此變數附加到 lines 列表。

  • 這樣,整個檔案將逐行讀取,並將行儲存在列表中。

此方法比前一種方法更快,因為它每次讀取一行,並且不需要將整個檔案載入到記憶體中。但是,它仍然讀取整個檔案,對於非常大的檔案來說速度可能會很慢。

mmap 模組

另一種選擇是使用 Python 中的 mmap 模組,該模組允許您將檔案對映到記憶體,從而提供一種高效的方式來訪問檔案,就好像它在記憶體中一樣。以下是如何使用 mmap 分割文字檔案的示例:

import mmap with open('file.txt', 'r') as f: # memory-map the file mmapped_file = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) # split the file by newline characters lines = mmapped_file.read().split('\n')

對於大型檔案,此方法效率最高,因為它允許您訪問檔案,就好像它在記憶體中一樣,而無需實際將整個檔案載入到記憶體中。

  • 程式碼首先匯入 mmap 模組。

  • 接下來,以與之前相同的方式開啟檔案,並對檔案物件呼叫 fileno() 方法以獲取檔案的檔案描述符。

  • 將其作為第一個引數傳遞給 mmap() 函式,並將 0 和 mmap.ACCESS_READ 分別作為第二個和第三個引數傳遞。這將檔案對映到記憶體,並將結果儲存在變數 mmapped_file 中。

  • 然後,對記憶體對映檔案呼叫 read() 方法,該方法將檔案的全部內容讀取到一個單一的字串中,如前所述。

  • 然後,對該字串呼叫 split() 函式,再次將換行符 \n 作為分隔符傳遞。這將字串拆分為子字串列表,其中每個子字串對應於原始檔案中的一個行。最後,結果儲存在變數 lines 中。

結論

總之,使用 Python 分割文字檔案的最快方法取決於檔案的大小。如果檔案較小,可以使用 split() 函式或 readline() 方法。但是,對於大型檔案,應使用 mmap 模組將檔案對映到記憶體,從而提供一種快速有效的檔案訪問方式。

更新於:2023年2月1日

33K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告