0

最初のファイルのx[#]と2番目のファイルのx [#]を使用したいのですが、これら2つの値が一致するかどうかを確認したいのですが、一致する場合は、他のいくつかのx [#]値と一緒に出力します。同じ行にある2番目のファイル。

ファイルの形式:(ただし、数百万あり、2つのファイルのペアはすべて一致している必要があるため、見つけたいと思います)

  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は行の任意のインデックスです。インデックスメソッドを使用して他の値と一緒に値。

4

1 に答える 1

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)
于 2012-06-29T18:33:44.733 に答える