如何读取和替换同一文件中的行

时间:2018-10-28 01:15:30

标签: python

我有一个巨大的文本文件,其中包含多行行。我想按顺序读取文件,并且每当我找到字符串时,在任何行中都假定为“ Apple”

我想替换整行,而不仅仅是字符串“ Apple”。

注意:“ Apple”只是一行中包含多个其他字符的字符串。       将行替换为“我们在这家商店不再出售苹果”。

我读到file.readlines()不能读取大量文件。因此,请给我指导,我如何不使用readlines来实现这一目标。

1 个答案:

答案 0 :(得分:1)

一种非常直接的方法是将所做的更改写入第二个文件,然后覆盖第一个文件。

with open(input_file, 'r') as ifile:
    with open(output_file, 'w') as ofile:
        for line in ifile:
            if 'Apple' in line:
                ofile.write('some other content')
            else:
                ofile.write(line)

然后删除输入文件并重命名输出文件


另一种方法是使用r +标志打开文件,并使用file.seek()在文件中四处移动。这样的东西(我还没有测试过):

pos = 0
with open(filename, 'r+') as fi:
    while True:
        line = fi.readline()
        if line == '': 
            break
        if 'Apple' in line:
            fi.seek(pos)  # Return to beginning of the read-in line
            fi.write(line.replace("Apple", "Orange"))  # Write new line
            fi.seek(pos)  # Return to the beginning of the written line
            line = fi.readline()  # Read to the end of the line
        pos = fi.tell()  # Fetch new position in the file

但是,这不明智,因为它容易出错。每次重写一行时,您都在改变下一行的开始位置,所以我写的内容可能甚至无法正常工作(如果替换时间超过了下一行,您有时可能会覆盖下一行的一部分)原本的)。

如果文件较小,则应将整个内容读取到内存中;如果文件较大,则应使用临时文件。