python - 比较两个文件并将缺失值写入文件

标签 python file loops compare

当我尝试比较两个大文件时遇到问题。我想做的是从一个文件中取出一行,搜索另一个文件的所有行以进行匹配,如果没有,则将该行写入另一个文件。我能够通过下面的简单示例重现问题:

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/

相关文章:

python - pip 将新的 Python 包安装到所有现有的 virtualenvs

python - IOError : request data read error

regex - 从命令行,仅在另一个正则表达式匹配后才进行 perl 替换匹配

c - 是否可以直接从文件写入套接字?

Ruby 救援并重试特定代码块

swift - 在无限循环中等待自己,但用户每次都可以取消

python - RFC 4648 (Base64) Python 实现

python - 用于 Matplotlib 交互的 IPython Notebook 小部件

c - 在 C 中,我应该如何在字符和另一个字符之间剪切文本文件?

PHP:循环并解析数组