我想使用第一个文件中的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可以是该行的任何索引。使用索引方法将值与其他值一起使用。
答案 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)