2012-08-29 119 views
1

我有兩個CSV文件。一:Python合併兩個CSV文件

s555555,7 
s333333,10 
s666666,9 
s111111,10 
s999999,9 

和兩個:

s111111,,,,, 
s222222,,,,, 
s333333,,,,, 
s444444,,,,, 
s555555,,,,, 
s666666,,,,, 
s777777,,,,, 

我想結束了:

[['s111111', '10', '', '', '', ''], 
['s222222', '', '', '', '', ''], 
['s333333', '10', '', '', '', ''], 
['s444444', '', '', '', '', ''], 
['s555555', '7', '', '', '', ''], 
['s666666', '9', '', '', '', ''], 
['s777777', '', '', '', '', '']] 

這裏是我的代碼:

new_marks = get_marks_from_file('assign1_marks.csv') 
marks  = get_marks_from_file('marks.csv') 

def merge_marks(all_marks, new_marks, column): 
    for n in range(len(new_marks)): 
     for a in range(len(all_marks)): 
      if all_marks[a][0]==new_marks[n][0]: 
       all_marks[a][column]= new_marks[n][column] 

       return marks 

我在做什麼錯?我不斷收到:

>>> merge_marks(marks, new_marks, 1) 

[['s111111', '', '', '', '', ''], 
['s222222', '', '', '', '', ''], 
['s333333', '', '', '', '', ''], 
['s444444', '', '', '', '', ''], 
['s555555', '7', '', '', '', ''], 
['s666666', '', '', '', '', ''], 
['s777777', '', '', '', '', '']] 
+0

什麼'get_marks_from_file'嗎?你的第二個文件是否有任何數據?如果沒有,你可以只添加4個空字符串? – dm03514

+0

你是怎麼調用'merge_marks'的? –

+0

get_marks_from_file修復csv文件 – Silvia

回答

2

   return marks 

必須由三個層次不縮進,把它弄出來兩者的for循環和if語句。現在它返回第一個all_marks[a][0]==new_marks[n][0]匹配它找到並永不替換其他。

您也想返回all_marks而非marks:在這種情況下,全局變量marks恰好是相同的,並且也改變了,但如果你有一個名爲字面上別的變量叫它,它會失敗。

解決的辦法是這樣的:

def merge_marks(all_marks, new_marks, column): 
    for n in range(len(new_marks)): 
     for a in range(len(all_marks)): 
      if all_marks[a][0]==new_marks[n][0]: 
       all_marks[a][column]= new_marks[n][column] 

    return all_marks 
+0

omg omg omg omg it works。終於在3個小時後試圖解決它。謝謝sooo – Silvia

+0

@ Hsiang-ChiWang歡迎您。不要忘記[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –