2013-10-29 104 views
0

我試圖創建一個腳本,它將寫入一個包含來自兩個單獨輸入文件的列的CSV文件。我在嘗試在兩個輸入文件上使用csv.Dictreader()時遇到問題,以便可以輕鬆引用要寫入的文件中的列。使用print,似乎來自兩個字典的鍵都被正確理解,但只有來自一個Dictionary的信息(曾經放在腳本中的第一個)正在被正確寫入,而第二個將只寫入每行中的第一個值。Python CSV - 從兩個字典中寫入

輸入文件的一個例子:

file1.csv

A,B 
1,2 
3,4 
5,6 

FILE2.TXT

1.11 
2.22 
3.33 

我想創建的OUTPUTFILE,用C在第一列和A在第二:

output.csv

1.11  1 
2.22  3 
3.33  5 

這是代碼,我迄今:

import csv 

with open('file1.csv', 'rb') as FileOne: 
    with open('file2.txt', 'rb') as FileTwo 
     with open('output.csv', 'wb') as OutFile: 
      LabelsOne = ['A', 'B'] 
      LabelsTwo = ['C'] 
      inf.next() 
      DictOne = csv.DictReader(FileOne, LabelsOne, skipinitialspace=True) 
      DictTwo = csv.DictReader(FileTwo, LabelsTwo, skipinitialspace=False) 
      outf = csv.writer(OutFile, delimiter='\t') 

      for DataOne in DictOne: 
       for DataTwo in DictTwo: 
        DataOne.update(DataTwo) 
        outf.writerow([DataOne['C'], DataOne['A']]) 

但現在我得到的輸出中或者是

1.11  1 
2.22  1 
3.33  1 

OR

1.11 1 
1.11 3 
1.11 5 

根據對,如果我把for DataOne in DictOnefor DataTwo in DictTwo第一。我已閱讀了關於使用CSV字典的其他討論,但沒有發現任何其他人有此問題。從兩個字典的鍵defintiely被認可,但只有一個是正確寫入。是否可以使用兩個字典來編寫輸出文件?

我知道,它通常會更容易只是CSV文件和複製/粘貼列開拓一個新的文件,但我需要這個過程重複了許多文件和作爲批處理的一部分。

回答

1

你不想嵌套循環的一切都在這裏,請嘗試使用zip()代替:

  for DataOne, DataTwo in zip(DictOne, DictTwo): 
       DataOne.update(DataTwo) 
       outf.writerow([DataOne['C'], DataTwo['A']]) 
+0

太感謝你了!這工作完美。 – Geogrammer