1. 程式人生 > >刪除大文件中的一行內容

刪除大文件中的一行內容

文件 導致 其中 兩個 定位 open() 操作 cat next

用 python 處理一個文本文件時,如果想要刪除其中的某一行,常規的思路是先把文件讀入內存,在內存中修改後再寫入源文件。

這對於小文件來說當然沒問題,但是如果要處理一個很大的文本,比如GB級別的文本時,這種方法不僅需要占用很大內存,而且一次性讀入內存時耗費時間,還有可能導致內存溢出。

所以,需要用另外一個思路去處理。

我們可以使用 open() 方法把需要修改的文件打開為兩個文件,然後逐行讀入內存,找到需要刪除的行時,用後面的行逐一覆蓋。實現方式見以下代碼。


with open(‘file.txt‘, ‘r‘) as old_file:
with open(‘file.txt‘, ‘r+‘) as new_file:

current_line = 0

# 定位到需要刪除的行
while current_line < (del_line - 1):
old_file.readline()
current_line += 1

# 當前光標在被刪除行的行首,記錄該位置
seek_point = old_file.tell()

# 設置光標位置
new_file.seek(seek_point, 0)

# 讀需要刪除的行,光標移到下一行行首
old_file.readline()

# 被刪除行的下一行讀給 next_line
next_line = old_file.readline()

# 連續覆蓋剩余行,後面所有行上移一行
while next_line:
new_file.write(next_line)
next_line = old_file.readline()

# 寫完最後一行後截斷文件,因為刪除操作,文件整體少了一行,原文件最後一行需要去掉
new_file.truncate()

刪除大文件中的一行內容