比较两个在Python中有一百万条记录的文件中的数据

2024-09-30 20:17:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件旧.txt以及新建.txt包含数十万个数据(大约120万个密钥和相应的数量)

在新建.txt在

key |amount
abgc-nhd|8976
mkis-plqa-d|-254
mjsnh-kis-ls|987
njud-lo-sa|5291
mkjsh-kis-ls|686
mjsnh-fis-ls|387
njudd-kid-ls|-876
nswxd-lo-sa|3191
mki-ksjd-as|-56

在旧.txt在

^{pr2}$

我想比较一下这两个文件。在

我想检查旧文件中的密钥是否与新文件中的密钥匹配文件。如果是的,那我得比较一下他们的数量。在

我尝试将所有值插入字典,然后检查条目是否存在,但这需要更长的时间,系统会被挂起。在

有没有其他方法可以根据密钥比较这两个文件。在

谢谢。在


Tags: 文件数据keytxtlo数量sa密钥
3条回答

如果你能使用熊猫,你可以做如下操作:

new_txt = """key |amount
abgc-nhd|8976
mkis-plqa-d|-254
mjsnh-kis-ls|987
njud-lo-sa|5291
mkjsh-kis-ls|686
mjsnh-fis-ls|387
njudd-kid-ls|-876
nswxd-lo-sa|3191
mki-ksjd-as|-56"""

old_txt  = """key |amount
mkjsh-kis-ls|686
njudd-kid-ls|-876
abgc-nhd|8976
mjsnh-kis-ls|987
njud-lo-sa|5291
mjsnh-fis-ls|387
mkis-plqa-d|-254
nswxd-lo-sa|3191"""


import pandas as pd
import io

df_new = pd.DataFrame.from_csv(io.StringIO(new_txt), sep="|")
df_old = pd.DataFrame.from_csv(io.StringIO(old_txt), sep="|")

print(df_new - df_old)

以下为示例数据:

^{pr2}$

NaN表示该密钥只存在于一个集合中。在

从您的代码片段中,我看到文件中的条目没有排序。因此,一个快速的解决方案是,如果顺序无关紧要,则对文件的条目进行排序,并比较两个文件中的行。在

排序之后,比如说,file1中的第1行以“abm…”开头,而file2中的line1以“bcn…”开头,那么就不需要对照文件2中以“a…”开头的其余条目,因为没有这样的内容。
继续下一行,然后像这样检查所有剩余的行。也可以打印那些只匹配的行并将其写入单独的文件中。此文件将只包含具有“公共”键的行,如您所愿。在

这个算法应该比O(n^2)快。在

import csv

with open('new.txt') as infile:
    records = {}
    for k,v in csv.reader(infile):
        records[k] = int(v)

with open('old.txt') as infile:
    for k,v in csv.reader(infile):
        if records[k] != int(v):
            print("There is a mismatch in key", k)

相关问题 更多 >