如何将文件中的差异写入 Python 中的新文件?

How to write differences in files to new file in Python?

作为一个更大项目的一部分,我需要根据匹配元素和不同元素创建文件。代码示例如下:

with open('TestFile1.csv', 'r') as file_1:
    with open('TestFile2.csv', 'r') as file_2:
        same = set(file_1).intersection(file_2)
        different = set(file_1).difference(file_2)

same.discard('\n')

with open('output_file_same.txt', 'w') as file_out_1:
    for line in same:
        file_out_1.write(line)

with open('output_file_different.txt', 'w') as file_out_2:
    for line in different:
        file_out_2.write(line)

比较相同的行并将其写入文件的行运行良好,但是应该return具有不同行的文件的代码return是一个空白文件。它应该 return 一个包含不同行的文件。有什么建议吗?

file_1file_2 是文件对象,这意味着它们是 迭代器;迭代器只能迭代一次,之后尝试再次迭代它时什么也读不到。所以当你这样做时:

same = set(file_1).intersection(file_2)

它清空 file_1file_2,所以:

different = set(file_1).difference(file_2)

的行为与 set([]).difference([]) 大致相同。要修复,请确保预先将数据吞噬一次,然后重新使用它,例如:

with open('TestFile1.csv', 'r') as file_1, open('TestFile2.csv', 'r') as file_2:
    file_1 = set(file_1)  # slurp to reusable set
    file_2 = set(file_2)  # slurp to reusable set
# Can be done outside the with block, since files no longer needed
same = file_1.intersection(file_2)     # Or: same = file_1 & file_2
different = file_1.difference(file_2)  # Or: different = file_1 - file_2

旁注:您不需要显式循环来写出结果;

for line in same:
    file_out_1.write(line)

可以简化为:

file_out_1.writelines(same)

运行速度更快,也更简单。