python 刪除大文件中的某一行(最有效率的方法)
用 python 處理一個文本時,想要刪除其中中某一行,常規(guī)的思路是先把文件讀入內(nèi)存,在內(nèi)存中修改后再寫入源文件。
但如果要處理一個很大的文本,比如GB級別的文本時,這種方法不僅需要占用很大內(nèi)存,而且一次性讀入內(nèi)存時耗費時間,還有可能導致內(nèi)存溢出。
所以,需要用另外一個思路去處理。
我們可以使用 open() 方法把需要修改的文件打開為兩個文件,然后逐行讀入內(nèi)存,找到需要刪除的行時,用后面的行逐一覆蓋。實現(xiàn)方式見以下代碼。
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()
# 連續(xù)覆蓋剩余行,后面所有行上移一行
while next_line:
new_file.write(next_line)
next_line = old_file.readline()
# 寫完最后一行后截斷文件,因為刪除操作,文件整體少了一行,原文件最后一行需要去掉
new_file.truncate()
以上這篇python 刪除大文件里的某一行(最有效率的方法)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python編程functools模塊創(chuàng)建修改的高階函數(shù)解析
本篇文章主要為大家介紹functools模塊中用于創(chuàng)建、修改函數(shù)的高階函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2021-09-09
PyQt5 QSerialPort子線程操作的實現(xiàn)
這篇文章主要介紹了PyQt5 QSerialPort子線程操作的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
關于Matplotlib繪制動態(tài)實時曲線的方法改進指南
這篇文章主要給大家介紹了關于Matplotlib繪制動態(tài)實時曲線的相關資料,matplotlib是python里最popular的畫圖工具,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2021-06-06
tensorflow如何將one_hot標簽和數(shù)字(整數(shù))標簽進行相互轉(zhuǎn)化
這篇文章主要介紹了tensorflow如何將one_hot標簽和數(shù)字(整數(shù))標簽進行相互轉(zhuǎn)化問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解
本文主要介紹了Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02

