【问题标题】:Finding matches in two files and outputting them在两个文件中查找匹配项并输出它们
【发布时间】:2012-06-29 16:46:34
【问题描述】:

我想使用第一个文件中的 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]

我想要的结果是:

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

【问题讨论】:

  • 澄清一下——那不是一对一的关系?
  • @JonClements 1-1 关系是什么意思?
  • 大小相同的文件,每行可通过键匹配
  • 不,文件的大小不相等,因为一个文件提供了关于另一个文件的更多信息,一个用作它的基本信息,另一个是一个巨大的详细信息文件。但是行数是一样的,而且我需要的信息都在单独的文件中,顺序混乱。
  • 你之前没问过这个吗? stackoverflow.com/questions/11253667/…

标签: python slider analytics match


【解决方案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)

【讨论】:

    猜你喜欢
    • 2017-09-11
    • 2021-12-26
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多