问题
1.a
2.ab
3.bc
…
文件如上所示,数字为行数。比如我需要删除内容为”a”的行,在大文件情况下,用何种语法最优?
其他编程语言也可推荐,谢谢。
最佳答案
with open('file.txt', 'r') as old_file:
with open('file.txt', 'r+') as new_file:
# 定位到需要删除的行,跳出循环时,seek_point 存放的是被删除行的行首的光标位置
while True:
# 记录光标位置
seek_point = old_file.tell()
if 'a' in old_file.readline().strip().split('.'):
# 光标跳到被删除行的下一行行首
break
# 设置光标位置,光标在被删除行的行首
new_file.seek(seek_point, 0)
# 被删除行的下一行读给 next_line
next_line = old_file.readline()
# 连续覆盖剩余行,后面所有行上移一行
while next_line:
new_file.write(next_line)
next_line = old_file.readline()
# 写完最后一行后截断文件,因为删除操作,文件整体少了一行,原文件最后一行需要去掉
new_file.truncate()