2015-04-06 56 views
0

我试图带两个csv文件,它们在列1中具有相同的ID号。有python查找匹配并将两列附加到匹配的行在电子表格中1.让他们在第一列寻找匹配,然后将匹配的行添加到相同的ID。列表索引超出范围,并且python说谎很大CSV

spreadsheet 1 
0001, beth, merda 
0002, mike, john 
0003, mary, smith 

表格2

0001, url, owner 
0003, url, owner 
0002, url, owner 

修正后

0001, beth, merda, url, owner 
0002, mike, john, url, owner 
0003, mary, smith, url, owner 

目前我得到一个错误:

File "payments.py", line 10, in <module> 
    if row[0] in first: # row[0] = clearing solution id 
IndexError: list index out of range 

如果我运行 print(len(first) 它说190.所以我不知所措

import csv 

#create a dict from first csv, with clearing solution id as key 
with open("WEEKLY DDS PAYMENT UPLOADS 3-30-15--4-3-15 (1).csv", "r") as f: 
    first = {rows[0]: rows[1:] for rows in list(csv.reader(f))} 

# compare second csv and append rank 
with open("report1428344317924.csv", "r") as f: 
    for row in csv.reader(f): 
     if row[0] in first: # row[0] = clearing solution id 
      first[row[0]].append(row[1]) # row[1] = rank 


# 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 f: 
    csv.writer(f).writerows(merged) 
+0

在'if row [0]'之前放置'print row'语句来查看'row'变量中真正的内容。 (提示:这不是有任何索引访问元素)。 –

+1

错误可能是由于您的csv文件中有空行 - 是否删除了空行?你可以在'csv.reader(f):'行中的行之后用'print row'来测试。 – vikramls

回答

2

检查您的空白行的报告文件。 csv.reader将在空行上返回0长度的序列,因此row[0]将超出范围。您无论如何都不会从first获得IndexError,这是一本字典而非列表,因此缺少的元素会提高KeyError

如果需要的话,很容易跳过空行,像if row and row[0] in first:那样简单。

+0

工作过的:D谢谢 – user2139635