假设我有一个文本文件
Line 1
Line 2
Line 3
我仔细阅读并决定将第2行更改为第2行。我是否可以在Python中优雅地执行此操作而无需仅使用更改重写文件?我尝试使用file.seek(),但我并没有真正得到它,也不知道它究竟是什么。
答案 0 :(得分:6)
文件是一个字节序列。如果要在中间更改需要更多或更少字节来表达的内容,则文件的其余部分需要调整大小。
因为文件是存储介质上的物理字节序列,这意味着您需要重写文件的整个 rest 。换句话说,您需要移动line 2
之后的所有内容。
在实践中,这意味着重写文件,因为这更容易实现。
答案 1 :(得分:2)
您需要fileinput
模块提供的就地编辑功能:
inplace-edit.py:
import sys
import fileinput
for line in fileinput.input(sys.argv[1], inplace=1):
line = line.rstrip() # Remove the new line
if line == 'Line 2':
line = 'Line two'
print line
data.txt中:
Line 1
Line 2
Line 3
运行它:
python inplace-edit.py data.txt
结果data.txt:
Line 1
Line two
Line 3