我想比较两个大文本文件(200M)来获得它们的相同行 如何在Python中做到这一点?
答案 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,