我有一个csv file1就像
FLAGSTAFF AZ 50244.67 5.02 KA1_Podium_Garage_S
FLAGSTAFF AZ 33752.13 3.38 KA1_Podium_Garage_S
FLAGSTAFF AZ 11965.5 1.2 KA1_Podium_Garage_S
FLAGSTAFF AZ 3966.48 0.4 KA1_Podium_Garage_S
SEATTLE WA 12646.9 1.26 KA1_Podium_Garage_S
SEATTLE WA 225053.92 22.51 KA1_Podium_Garage_S
SEATTLE WA 23974.3 2.4 KA1_Podium_Garage_S
SEATTLE WA 7036.4 0.7 KA1_Podium_Garage_S
SEATTLE WA 3021.93 0.3 KA1_Podium_Garage_S
Run Code Online (Sandbox Code Playgroud)
我有一个csv文件2,就像,
Alabama AL 1
Alaska AK 2
Arizona AZ 4
Arkansas AR 5
California CA 6
Colorado CO 8
Connecticut CT 9
SEATTLE WA 53
Run Code Online (Sandbox Code Playgroud)
现在我必须通过比较第二列将csv file2中的第三列值附加到csv file1
例如它应该看起来像,
AZ代码是4 WA代码是53,无论AZ,WA在我的csv file1中,代码都应该附加到列中
我的输出应该是这样的,
FLAGSTAFF AZ 50244.67 5.02 KA1_Podium_Garage_S 4
FLAGSTAFF AZ 33752.13 3.38 KA1_Podium_Garage_S 4
FLAGSTAFF AZ 11965.5 1.2 KA1_Podium_Garage_S 4
FLAGSTAFF AZ 3966.48 0.4 KA1_Podium_Garage_S 4
SEATTLE WA 12646.9 1.26 KA1_Podium_Garage_S 53
SEATTLE WA 225053.92 22.51 KA1_Podium_Garage_S 53
SEATTLE WA 23974.3 2.4 KA1_Podium_Garage_S 53
SEATTLE WA 7036.4 0.7 KA1_Podium_Garage_S 53
SEATTLE WA 3021.93 0.3 KA1_Podium_Garage_S 53
Run Code Online (Sandbox Code Playgroud)
这是我试过的代码,
with open("/home/sumit/Desktop/CSV_FILE1.csv", "r") as f:
first = {rows[1]: rows[0:] for rows in list(csv.reader(f))}
# compare second csv and append Code
with open("CSVFILE2.csv", "r") as f1:
for row in csv.reader(f1):
if row[1] in first:
first[row[1]].append(row[2])
# convert dict back to list
merged = [(k,) + tuple(v) for k, v in first.items()]
# write list to output csv
with open("output.csv", "w") as f1:
csv.writer(f1).writerows(merged)
Run Code Online (Sandbox Code Playgroud)
输出我好像,
AZ FLAGSTAFF AZ 44230.4 4.42 KA1_Podium_Garage_S 4
WA SEATTLE WA 45329.3 4.53 KA1_Podium_Garage_S 53
Run Code Online (Sandbox Code Playgroud)
此行正在根据您的第一个文件中的州缩写创建字典。这看起来是错误的,因为字典中每个键只能有一次,并且例如有多行包含“AZ”。
first = { rows[1]: rows[0:] for rows in list(csv.reader(f)) }
Run Code Online (Sandbox Code Playgroud)
相反,您应该根据第二个文件制作字典:
with open("CSVFILE2.csv", "r") as f1:
code = { row[1]: row[2] for row in csv.reader(f1) }
Run Code Online (Sandbox Code Playgroud)
然后,循环第一个文件,并将适当的代码附加到每一行。
with open("/home/sumit/Desktop/CSV_FILE1.csv", "r") as f:
merged = [ row + [code[row[1]]] for row in csv.reader(f) ]
Run Code Online (Sandbox Code Playgroud)
并将合并后的数据写出到新文件中。
的解释row + [code[row[1]]]:
如果行是["FLAGSTAFF", "AZ", 50244.67, 5.02, "KA1_Podium_Garage_S"],那么
row[1]是"AZ",code[row[1]]是code["AZ"]是4,[code[row[1]]]是列表[4]row + [code[row[1]]列表串联,产生所需的新行值:["FLAGSTAFF", "AZ", 50244.67, 5.02, "KA1_Podium_Garage_S", 4]