【问题标题】:Replacing text from one file from another file从另一个文件替换一个文件中的文本
【发布时间】:2019-03-06 20:03:15
【问题描述】:

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()

【问题讨论】:

  • 您需要阅读文件吗?
  • 简单地删除file2并创建file1的新副本,命名为file2不是更容易吗?
  • if line1.read() == line2.read() 他们是一样的
  • 当你可以像@Kevin提到的那样复制时,你为什么要逐行比较它们。

标签: python


【解决方案1】:

我会 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

【讨论】:

    【解决方案2】:

    我希望 file1 与 file2 相同

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

    这会更快,因为您不必读取 file1。

    您的代码不起作用,因为您必须定位文件当前指针(f1.seek() 位于正确的位置才能写入该行。

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

    由于行可以有不同的大小,因此完成这项工作并不容易,因为即使您正确定位指针,如果将某些行修改为更大,它会在您写入时覆盖文件中下一行的一部分它。无论如何,您最终都必须将至少部分文件内容缓存在内存中。

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

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2013-05-19
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2017-05-12
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多