这个问题在这里已有答案:
我正在尝试使用以下方法在文件的特定位置插入一些文本:
with open("test.txt","r+") as f:
f.seek(5)
f.write("B")
但是这会用新数据(“B”)覆盖位置5处的字符而不是插入它。
例如,如果我有
AAAAAAAAAA
在文件test.txt
并运行代码我得到AAAAABAAAA
而不是AAAAABAAAAA
(五个A
必须在B
之后)
如何在文件的所需位置插入而不是覆盖?
有三个答案:
open
)。此外,正如我检查(2018年9月)pypi上的fallocate
模块不支持它,所以你需要写一个低级代码来做FALLOC_FL_INSERT_RANGE
ioctl。TL; DR;如果文件很小,请将其读入内存并插入内存。如果您的文件是中等大小(1-2Gb),请在临时文件中执行,然后重命名。如果您的文件很大,请使用窗口操作或深入查看FALLOC_FL_INSERT_RANGE
(如果您有一个相对现代的Linux)。
这对我有用:
with open("test.txt","r+") as f:
f.seek(5) #first fseek to the position
line=f.readline() #read everything after it
f.seek(5) #since file pointer has moved, fseek back to 5
f.write("B") #write the letter
f.write(line) #write the remaining part
Original : AAAAAAAAAA
After : AAAAABAAAAA
f1 = open("test.txt","r+")
f1.seek(5)
data = "{}{}".format("B",f1.readline())
f1.seek(5)
f1.write(data)
f1.close()