当我尝试比较两个大文件时遇到问题。我想做的是从一个文件中取出一行,搜索另一个文件的所有行以进行匹配,如果没有,则将该行写入另一个文件。我能够通过下面的简单示例重现问题:
file1.txt(内容)
apple
banana
pear
peach
lime
file_old.txt(内容)
lime
apple
pear
peach
因为我在 file1 中寻找不在 file_old 中的行,所以我希望“banana”是输出文件中显示的唯一值。但在输出文件“*fill_diff*”中,我显示:
apple
banana
banana
我尝试在文件中产生差异的代码有什么问题?
def main():
file_old = open(r'C:\Users\test\Desktop\file_old.txt', 'r+')
file_new = open(r'C:\Users\test\Desktop\file1.txt', 'r+')
file_diff = open(r'C:\Users\test\Desktop\file_diff.txt', 'w')
for each_line in file_new:
for every_line in file_old:
if each_line == every_line:
break
file_diff.write(each_line)
file_old.close()
file_new.close()
file_diff.close()
main()
谢谢!
最佳答案
srgerg 的回答会起作用。
但是多次读取文件会有非常大的运行时复杂度。因此,如果文件(虽然很大)小到可以放入内存,那么您可以考虑将 file_old
中的所有行放入一个数据结构中进行比较:
old_lines = set((line.strip() for line in open(r'C:\Users\test\Desktop\file_old.txt', 'r+')))
file_new = open(r'C:\Users\test\Desktop\file1.txt', 'r+')
file_diff = open(r'C:\Users\test\Desktop\file_diff.txt', 'w')
for line in file_new:
if line.strip() not in old_lines:
file_diff.write(line)
file_new.close()
file_diff.close()
希望对你有帮助
关于python - 比较两个文件并将缺失值写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8319970/