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

2024-04-26 17:16:31 发布

您现在位置: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)

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


Tags: 文件csv代码txtforoutputaswith
1条回答
网友
1楼 · 发布于 2024-04-26 17:16:31

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)

它运行得更快,也更简单

相关问题 更多 >