所以我问题是:
我有两个CSV文件,每个文件有大约500 000行。
文件1如下所示:
ID|NAME|OTHER INFO
353253453|LAURENT|STUFF 1
563636345|MARK|OTHERS
786970908|GEORGES|THINGS
文件2如下所示:
LOCATION;ID_PERSON;PHONE
CA;786970908;555555
NY;353253453;555666
因此,我需要做的是查找ID相同的行,并将文件2中的行添加到新文件中文件1中对应行的末尾,如果没有对应的ID,则添加空列,如下所示:
ID;NAME;OTHER INFO;LOCATION;ID_PERSON;PHONE
353253453;LAURENT;STUFF 1;NY;353253453;555666
563636345;MARK;OTHERS;;;
786970908;GEORGES;THINGS;CA;786970908;555555
文件1是主要的,如果这是有意义的。
问题是我已经找到了一个解决方案,但它需要太长的时间,因为对于文件1的每一行,我循环通过文件2。
下面是我的代码:
input1 = open(filename1, 'r', errors='ignore')
input2 = open(filename2, 'r', errors='ignore')
output = open('result.csv', 'w', newline='')
for line1 in input1:
line_splitted = line1.split("|")
id_1 = line_splitted[0]
index = 0
find = False
for line2 in file2:
file2_splitted = line2.split(";")
if id_1 in file2_splitted[1]:
output.write((";").join(line1.split("|"))+line2)
find = True
file2.remove(line2)
break
index+=1
if index == len(file2) and find == True:
output.write((";").join(line1.split("|")))
for j in range(nbr_col_2):
output.write(";")
output.write("\n")
所以我想知道是否有更快的方法来做到这一点,或者我是否必须耐心等待,因为现在20分钟后,只写了20000行...
3条答案
按热度按时间b4lqfgs41#
首先逐行读取file2,以建立
lookup
指令。然后逐行读取file1,在dict中查找ID键,构建输出行并写入输出文件。
这是一个复杂度为O(n)的过程,只有dict会消耗一点内存,所有的文件处理都是基于流的。
ca1c2owp2#
正如Alex在他的评论中指出的,你可以使用Pandas合并这两个文件。
使用示例
file_3.csv
看起来如下所示:额外
顺便说一句,如果你不熟悉Pandas,这是一个很棒的入门课程:Learn Pandas Tutorials
w51jfk4q3#
您可以创建索引以防止每次都遍历file2。通过从file2创建一个字典并通过调用其索引检索它的每个相关项来实现这一点。