【发布时间】:2011-05-09 02:13:39
【问题描述】:
我有两个文件(最长可达 150,000 行;每行 160 个字节),我想检查每个文件中的行是否相同。 diff 对我不起作用(直接),因为一小部分行在两个文件中以不同的顺序出现。通常,一对线将被转置。
查看两个文件中是否出现相同行但顺序无关紧要的最佳方法是什么?
谢谢,
克里斯
【问题讨论】:
标签: file comparison
我有两个文件(最长可达 150,000 行;每行 160 个字节),我想检查每个文件中的行是否相同。 diff 对我不起作用(直接),因为一小部分行在两个文件中以不同的顺序出现。通常,一对线将被转置。
查看两个文件中是否出现相同行但顺序无关紧要的最佳方法是什么?
谢谢,
克里斯
【问题讨论】:
标签: file comparison
另一个执行此操作的 python 脚本:
#!/usr/bin/env python
import sys
file1 = sys.argv[1]
file2 = sys.argv[2]
lines1 = open(file1,'r').readlines()
lines2 = open(file2,'r').readlines()
lines1.sort()
lines2.sort()
s = ''
for i,line in enumerate(lines1):
if lines2[i] != line:
print '> %s' % line
print '< %s' % lines2[i]
s = 'not'
print 'file %s is %s like file %s' % (file1, s, file2)
【讨论】:
虽然这是一种稍微昂贵的方法(对于任何更大的事情,我都会重新考虑这个),但我会启动 python 并执行以下操作:
filename1 = "WHATEBVER YOUR FILENAME IS"
filename2 = "WHATEVER THE OTHER ONE IS"
file1contents = set(open(filename1).readlines())
file2contents = set(open(filename2).readlines())
if file1contents == file2contents:
print "Yup they're the same!"
else:
print "Nope, they differ. In file2, not file1:\n\n"
for diffLine in file2contents - file1contents:
print "\t", diffLine
print "\n\nIn file1, not file2:\n\n"
for diffLine in file1contents - file2contents:
print "\t", diffLine
如果它们不同,它将打印不同的行。
【讨论】:
对于只有 150k 行,只需对每一行进行哈希处理并将它们按顺序存储在查找表中。然后对文件 2 中的每一行执行查找。
【讨论】: