提前比较两个或多个csv文件

2024-05-29 07:55:53 发布

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

我只是在学一条Python,大家都知道,最好的方法就是练习;) 现在我有一份工作,我想尝试用python来做,但我需要一些建议。你知道吗

嗯。。。我有一些CSV文件。结构看起来像:

第一个CVS workerID、workerName、workerPhoneNumber

其他CSV包含第一组的一个子集。你知道吗

我的意思是,在第一个文件中,例如,有10000个雇员,在每个雇员中,都有相同雇员的一部分。 例如: 在第一个文件中,我

00001 Randal 555555
00002 Tom 66666
00003 Anthony 77775
00004 Mark 3424435
00005 Anna 3443223
00006 Monica 412415415
.....

在第二个文件中:

00001 Randal 555555
00004 Mark 3424435
00006 Monica 412415415
....

和第3个文件:

00001 Randal 555555
00004 Mark 3424435
00005 Anna 3443223
....

我必须检查所有文件中所有用户的有效性。我的意思是:检查比安娜表格所有文件有相同的ID和电话在其他文件和相同的所有结果(这是巨大的文件10万行)。然后我将返回所有不匹配项。 一个加法问题是行中的一些“NA”。你知道吗

我刚完成了一个numpy教程,但我不知道怎么去学习。我甚至不知道用numpy是个好习惯。所以我需要你的建议。。。我怎么处理这个问题?你知道吗

EDIT:Workes有唯一的名称:)它的随机字符串实际上不是名称:D只是示例:D在单个文件id中也是唯一的


Tags: 文件csv方法numpy名称monica结构建议
1条回答
网友
1楼 · 发布于 2024-05-29 07:55:53

使用标准函数和数据结构就足够了。 让我们通过使用列表理解的词典列表来表示您的文件:

header = ('id', 'name', 'phone_number')

records_1 = [{k:v for k, v in zip(header, line.strip().split(' ')} } for line in open('path_to_file1', 'r')]
records_2 = [{k:v for k, v in zip(header, line.strip().split(' ')} } for line in open('path_to_file2', 'r')]

然后,如果要根据用户名检查记录,请使用名称为键、记录为值的字典:

records_1 = {rec['name']: rec for rec in records_1}
records_2 = {rec['name']: rec for rec in records_2}

如果您有重复的ID,请检查每个名称。如果是,则将其保存到输出:

seen = {}
output = []
for records, others in [(records_1, records_2), (records_2, records_1)]:
    for name, rec in records:
        if name in seen:
            continue

        if rec['id'] != others['name']['id']:
            output.append((name, rec, others['name']))

注意:我们可以使用itertools中的置换来推断置换列表: https://docs.python.org/3/library/itertools.html

希望这有帮助!你知道吗

相关问题 更多 >

    热门问题