如何仅将内容的差异从一个文件复制到另一个文件?

时间:2015-05-11 07:18:44

标签: python file-io text-files

我有两个文件,源文件和dest文件。我想将此源文件中的内容复制到dest文件,但不是整个内容仅包含源文件中的那部分而不是目标文件中的部分。

我尝试搜索并遇到了shutil模块,但我找不到任何只将内容差异从一个文件复制到另一个文件的函数。

如何在Python中执行此操作?我们有任何库函数来完成这个吗?

示例:

source.txt:     dest.txt
a               a
b               c
c               e
d               f
e

完成所需的操作后,应该是:

source.txt:     dest.txt
a               a
b               c
c               e
d               f
e               b
                d

请注意,行的顺序并不重要。

2 个答案:

答案 0 :(得分:1)

如果您可以将文件排列为行列表,我们可以非常轻松地完成此任务。

if len(lineList1) > len(lineList2):
    src = lineList1
    dst = lineList2
else
    src = lineList2
    dst = lineList1
for x in range(len(src)):
    if src[x] != dst[x]
        dst[x] = scr[x]

此代码段找到最长的列表,迭代两者,如果目标上的行不相同,则会复制该列表。虽然我不确定这种方法对复制文件的好处;除了练习。

修改

我想我明白了。试试这个片段:

output = dst + [x for x in src if x not in dst]

这会迭代每一行,如果它不在dst中,则会在最后添加。

答案 1 :(得分:0)

使用difflib

import difflib
file1 = "PATH OF FILE 1"
file1 = open(file1, "r")
file2 = "PATH OF FILE 2"
file2 = open(file2, "r")
diff = difflib.ndiff(file1.readlines(), file2.readlines())
file1.close()
file2.close()
delta = ''.join(x[2:] for x in diff if x.startswith('- '))
fh = open("PATH OF FILE 2", "a")
fh.write(delta)
fh.close
fh = open("PATH OF FILE 2","r")
print fh.read()
fh.close()