如何在两个大文本文件中找到相同的行?

时间:2011-12-22 04:06:34

标签: python

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

4 个答案:

答案 0 :(得分:1)

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

保留集合中的行号,并按照上面的行号对它们进行排序,如果您想按原始顺序输出它们。

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

优化:使用哈希来优化比较;在初始读取中执行哈希

答案 1 :(得分:1)

免责声明:我真的不知道这对200Mb有多高效,但我觉得值得尝试:

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

f1 = open("one")
f2 = open("two")

print set(f1).intersection(f2)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

以下是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,