我正在尝试使用以下方法在文件的特定位置插入一些文本:
with open("test.txt","r+") as f:
f.seek(5)
f.write("B")
但是,这会使用新数据(“ B”)覆盖位置5的字符,而不是插入它。
例如,如果我有
AAAAAAAAAA
在文件test.txt
中并运行代码
我得到的是AAAAABAAAA
而不是AAAAABAAAAA
(五个A
必须在B
之后)
我如何在文件的所需位置插入而不是覆盖?
答案 0 :(得分:1)
这对我有用:
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
答案 1 :(得分:1)
有三个答案:
open
)。此外,正如我在2018年9月检查的那样,pypi上的fallocate
模块不支持它,因此您需要编写一个低级代码来执行FALLOC_FL_INSERT_RANGE
ioctl。 TL; DR;如果文件很小,则将其读入内存并插入内存。如果文件中等大小(1-2Gb),请在临时文件中进行处理,然后重命名。如果您的文件很大,请使用窗口操作或深入研究FALLOC_FL_INSERT_RANGE
(如果您使用的是相对较新的linux)。
答案 2 :(得分:1)
f1 = open("test.txt","r+")
f1.seek(5)
data = "{}{}".format("B",f1.readline())
f1.seek(5)
f1.write(data)
f1.close()