【问题标题】:How to find same lines in two large text files?如何在两个大文本文件中找到相同的行?
【发布时间】:2011-12-22 04:06:34
【问题描述】:

我想比较两个大文本文件 (200M) 以获得相同的行。
如何在 Python 中做到这一点?

【问题讨论】:

标签: python


【解决方案1】:

因为它们只有 200M,所以分配足够的内存,读取它们,按升序对行进行排序,然后像在合并操作中一样并行遍历两个行集合,并删除仅出现在一组中的行。

如果要按原始顺序输出,请保留集合中的行号并按上述行号对其进行排序。

合并操作:为每个集合保留一个索引,如果两个索引处的行匹配,则增加两个索引,否则删除较小的行并仅增加该索引。如果任一索引超过最后一行,则删除另一个集合中的所有剩余行。

优化:使用散列来优化比较;在初始读取中做哈希

【讨论】:

    【解决方案2】:

    免责声明:我真的不知道这对于 200Mb 的效率会有多高,但我想值得一试:

    我尝试了以下两个 ~80mb 文件,结果在 3GB Ram intel i3 机器上大约 2.7 秒。

    f1 = open("one")
    f2 = open("two")
    
    print set(f1).intersection(f2)
    

    【讨论】:

    • @agks mehx 编辑某人的代码时要非常小心,我是这么说的。
    • @J.F.Sebastian 谢谢!已更正。
    • @agksmehx 完全没问题 :)
    【解决方案3】:

    您也许可以使用标准的difflib 模块。该模块提供了几种从各种输入创建差异增量的方法。

    【讨论】:

      【解决方案4】:

      这是来自docs 的示例:

      >>> from difflib import context_diff
      >>> fromfile = open('before.py')
      >>> tofile = open('tofile.py')
      >>> for line in context_diff(fromfile, tofile, fromfile='before.py', tofile='after.py'):
              print line,
      

      【讨论】:

        猜你喜欢
        • 2012-11-25
        • 1970-01-01
        • 2013-04-29
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        • 2013-08-28
        • 1970-01-01
        相关资源
        最近更新 更多