2015-04-06 55 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