0

希望有解决这个问题的建议

我有两个文本文件 A 和 B
A=

23,34,67,56  
45,66,86,98  
65,113,77,99  

乙=

11,34,58,99,109,24  
23,34,67,56,99,98  
55,100,75,45,44,90  
65,113,77,99,114,45  

我想要的是选择 B 中的所有行元素,其中通过连接前两个行元素生成的唯一键值之间存在匹配,并将这些行写入新文件 C.

基于示例文件 A 和 B;
C=

23,34,67,56,99,98  
65,113,77,99,114,45

输入文件通常都有 100 000 行 谢谢您的帮助

4

1 回答 1

1

您在这里有 CSV 文件,因此请使用该csv模块来读取和写入这些文件。使用一个集合来存储来自 A 的唯一键,然后使用该集合来过滤来自 B 的行:

import csv

with open(A, 'rb') as file_a:
    selected = {tuple(row[:2]) for row in csv.reader(file_a)}

with open(B, 'rb') as file_b, open(C, 'wb') as file_c:
    reader = csv.reader(file_b)
    writer = csv.writer(file_c)
    writer.writerows(row for row in reader if tuple(row[:2]) in selected)

请注意,集合和字典一样,只能存储可散列值,因此我们将每个 CSV 行的前两列转换为一个元组以满足该要求。

于 2013-08-07T08:44:56.310 回答