我的本地磁盘中有一个大文件,其中第一行包含一些固定长度的字符串。我需要使用python以编程方式替换该固定长度的字符串,而无需读取内存中的整个文件。
我尝试以附加模式打开文件并尝试到0位置。然后替换9字节的字符串。我尝试过的代码也添加在这里。
with open ("largefile.txt", 'a') as f:
f.seek(0,0)
f.write("123456789")
答案 0 :(得分:2)
我认为您只想打开文件以进行写入而不将其截断,该文件将为r+
。为了重现此效果,我们首先创建一个与以下格式匹配的文件:
with open('many_lines.txt', 'w') as fd:
print('abcdefghi', file=fd)
for i in range(10000):
print(f'line {i:09}', file=fd)
然后我们基本上按照您的操作来做,但是使用正确的模式:
with open('many_lines.txt', 'r+') as fd:
print('123456789', file=fd)
或者您可以通过以下方式直接使用write
:
with open('many_lines.txt', 'r+') as fd:
fd.write('123456789')
注意:我正在r+
中打开,以便您得到一个FileNotFoundError
(如果它不存在(或文件名拼写错误)),而不仅仅是盲目地创建一个小文件>
open
模式是直接从C/POSIX API for the fopen
复制而来的,因此您使用a
将触发如下行为:
对文件的后续写入将始终在文件的当前末尾结束,而不管中间是否有fseek(3)或类似内容