替换现有大文件中的字符

时间:2019-06-25 08:08:58

标签: python

我的本​​地磁盘中有一个大文件,其中第一行包含一些固定长度的字符串。我需要使用python以编程方式替换该固定长度的字符串,而无需读取内存中的整个文件。

我尝试以附加模式打开文件并尝试到0位置。然后替换9字节的字符串。我尝试过的代码也添加在这里。

    with open ("largefile.txt", 'a') as f:
        f.seek(0,0)
        f.write("123456789")

1 个答案:

答案 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)或类似内容