【发布时间】:2011-12-22 04:06:34
【问题描述】:
我想比较两个大文本文件 (200M) 以获得相同的行。
如何在 Python 中做到这一点?
【问题讨论】:
-
行是否以任何方式排序?可以订购吗?
标签: python
我想比较两个大文本文件 (200M) 以获得相同的行。
如何在 Python 中做到这一点?
【问题讨论】:
标签: python
因为它们只有 200M,所以分配足够的内存,读取它们,按升序对行进行排序,然后像在合并操作中一样并行遍历两个行集合,并删除仅出现在一组中的行。
如果要按原始顺序输出,请保留集合中的行号并按上述行号对其进行排序。
合并操作:为每个集合保留一个索引,如果两个索引处的行匹配,则增加两个索引,否则删除较小的行并仅增加该索引。如果任一索引超过最后一行,则删除另一个集合中的所有剩余行。
优化:使用散列来优化比较;在初始读取中做哈希
【讨论】:
免责声明:我真的不知道这对于 200Mb 的效率会有多高,但我想值得一试:
我尝试了以下两个 ~80mb 文件,结果在 3GB Ram intel i3 机器上大约 2.7 秒。
f1 = open("one")
f2 = open("two")
print set(f1).intersection(f2)
【讨论】:
您也许可以使用标准的difflib 模块。该模块提供了几种从各种输入创建差异增量的方法。
【讨论】:
这是来自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,
【讨论】: