在两个文件中查找匹配并输出它们

时间:2012-06-29 16:46:34

标签: python slider analytics match

我想使用第一个文件中的x [#]和第二个文件中的x [#],我想看看这两个值是否匹配,如果它们我想要输出那些,以及其他几个x [#]第二个文件中的值,它们位于同一行。

文件所在的格式:(但是有数百万,我想找到两个文件中的对,因为它们都应该匹配)

  line 1  data,data,data,data
  line 2  data,data,data,data

文件1中的数据:

 (N'068D556A1A665123A6DD2073A36C1CAF', N'A76EEAF6D310D4FD2F0BD610FAC02C04DFE6EB67',    
N'D7C970DFE09687F1732C568AE1CFF9235B2CBB3673EA98DAA8E4507CC8B9A881');

文件2中的数据:

00000040f2213a27ff74019b8bf3cfd1|index.docbook|Redhat 7.3 (32bit)|Linux
00000040f69413a27ff7401b8bf3cfd1|index.docbook|Redhat 8.0 (32bit)|Linux
00000965b3f00c92a18b2b31e75d702c|Localizable.strings|Mac OS X 10.4|OSX
0000162d57845b6512e87db4473c58ea|SYSTEM|Windows 7 Home Premium (32bit)|Windows
000011b20f3cefd491dbc4eff949cf45|totem.devhelp|Linux Ubuntu Desktop 9.10 (32bit)|Linux

它的排序顺序是字母数字,我想使用滑块方法。我的意思是,如果file1 [x]是< file2 [x]向下或向上移动滑块,具体取决于一个值是否大于另一个值,直到找到匹配为止,如果是,则何时打印输出以及将识别该哈希值的其他值。

我想要的结果是:

file1 [x]及其对应的file2 [x]匹配输出到文件,以及其他file1 [x],其中x可以是该行的任何索引。使用索引方法将值与其他值一起使用。

1 个答案:

答案 0 :(得分:1)

一个起点,添加你自己的盐和胡椒,它远非最佳,应该使用executemany等......但这是由你来决定的。

from StringIO import StringIO
import csv
import sqlite3 as sq3
from operator import methodcaller, itemgetter
from itertools import groupby

data1 = """068D556A1A665123A6DD2073A36C1CAF
A76EEAF6D310D4FD2F0BD610FAC02C04DFE6EB67
D7C970DFE09687F1732C568AE1CFF9235B2CBB3673EA98DAA8E4507CC8B9A881"""

data2 = """00000040f2213a27ff74019b8bf3cfd1|index.docbook|Redhat 7.3 (32bit)|Linux
00000040f69413a27ff7401b8bf3cfd1|index.docbook|Redhat 8.0 (32bit)|Linux
00000965b3f00c92a18b2b31e75d702c|Localizable.strings|Mac OS X 10.4|OSX
0000162d57845b6512e87db4473c58ea|SYSTEM|Windows 7 Home Premium (32bit)|Windows
000011b20f3cefd491dbc4eff949cf45|totem.devhelp|Linux Ubuntu Desktop 9.10 (32bit)|Linux"""

file1 = StringIO(data1)
file2 = StringIO(data2)

db = sq3.connect(':memory:')
db.execute('create table keys (key)')
db.execute('create table details (key, f1, f2, f3)')

for f1data in file1:
    db.execute('insert into keys values(?)', (f1data.strip(),))

for f2data in file2:
    row = map(methodcaller('strip'), f2data.split('|'))
    db.execute('insert into details values (?,?,?,?)', row)

results = db.execute('select * from keys natural join details')

for key, val in groupby(results, itemgetter(0)):
    print key, list(val)