从一个文件替换另一个文件的文本

时间:2018-10-01 17:05:52

标签: python

f1.write(line2)有效,但是它不会替换文件中的文本,而只是将其添加到文件中。我希望file1与file2相同(如果它们不同),方法是用file2中的文本覆盖file1中的文本

这是我的代码:

 with open("file1.txt", "r+") as f1, open("file2.txt", "r") as f2:
     for line1 in f1:
         for line2 in f2:
             if line1 == line2:
                 print("same")
             else:
                 print("different")
                 f1.write(line2)
             break
 f1.close()
 f2.close()

2 个答案:

答案 0 :(得分:0)

  

我希望file1与file2相同

import shutil
with open('file2', 'rb') as f2, open('file1', 'wb') as f1:
    shutil.copyfileobj(f2, f1)

因为您不必读取file1,所以速度会更快。

您的代码无法正常工作,因为您必须将文件的当前指针(f1.seek()放置在正确的位置才能编写该行。

在您的代码中,您首先读取一行,然后将指针放置在刚读取的行之后。写入时,该行数据将被写入该位置的文件中,从而复制该行。

由于行的大小可以不同,因此使这项工作变得不容易,因为即使正确定位了指针,如果对某行进行了修改以使其变大,那么在编写时也会覆盖文件中下一行的一部分它。无论如何,您最终将不得不至少将一部分文件内容缓存在内存中。

更好地截断文件(擦除其内容)并直接写入其他文件数据-这样它们将是相同的。这就是答案中的代码。

答案 1 :(得分:0)

我会read都用两个文件创建一个新的list,并替换不同的元素,然后将整个列表写入文件中

with open('file2.txt', 'r') as f:
    content = [line.strip() for line in f]

with open('file1.txt', 'r') as j:
    content_a = [line.strip() for line in j]
    for idx, item in enumerate(content_a):
        if content_a[idx] == content[idx]:
            print('same')
            pass
        else:
            print('different')
            content_a[idx] = content[idx]

with open('file1.txt', 'w') as k:
    k.write('\n'.join(content_a))

file1.txt之前:

chrx@chrx:~/python/stackoverflow/9.28$ cat file1.txt
this
that
this
that
who #replacing
that
what
blah

code输出:

same
same
same
same
different
same
same
same

file1.txt之后:

chrx@chrx:~/python/stackoverflow/9.28$ cat file1.txt
this
that
this
that
vash #replaced who
that
what
blah