2017-01-03 58 views
0

我有一個python默認字典,如下面的結果所示。如需要的輸出中所示,我需要將它們打印在csv文件中。Python csv + defult字典與多維

print(result_fruit) 
defaultdict(<class 'collections.Counter'>, 
      { 'word': Counter({ 'Tom_success': 5, 
            'Jerry_Success': 4}), 
       'pdf': Counter({ 'Tom_success': 1, 
            'Jerry_success': 3}), 
       }) 
以CSV

所需的輸出:

mime Tom_success Jerry_success 
word  5   4 
pdf  1   3 

凡我在CSV輸出被打破,光標不會去下一列:

mime     Tom_success  Jerry_success 
word     
5 
4 
pdf 
1 
3 

我的代碼:

with open('output.csv', 'w') as f: 
    writer = csv.writer(f,delimiter =',') 
    writer.writerow(('mime','Tom_success','Jerry_success')) 
    for mime in result_fruit: 
     f.write('{}\n'.format(mime)) 
     for category_success in sorted(result_fruit[mime]): 
       writer.writerow('{}'.format(result_fruit[mime][category_success])) 
+0

'f.write('{} \ n'.format(mime))'??你寫入文件本身和'csv.writer'?我不認爲它會解決所有問題,但似乎是錯誤的。 –

回答

1

對於每行輸出,請撥打.writerow()一次。通過.writerow()該行中項目的列表或元組。

試試這個:

with open('output.csv', 'w') as f: 
    writer = csv.writer(f, delimiter=',') 
    writer.writerow(('mime', 'Tom_success', 'Jerry_success')) 
    for mime, data in result_fruit.items(): 
     writer.writerow([mime, data['Tom_success'], data['Jerry_success']]) 

或者,你可以使用csv.Dictwriter。再次,爲每行輸出調用.writerow()一次。

with open('output.csv', 'w') as f: 
    writer = csv.DictWriter(f, ['mime', 'Tom_success', 'Jerry_success']) 
    writer.writeheader() 
    for mime, data in result_fruit.items(): 
     row = {'mime': mime} 
     row.update(data) 
     writer.writerow(row) 
0

你正在告訴它寫第e鍵以及單獨的行

for mime in result_fruit: 
    f.write('{}\n'.format(mime)) 

    # writes the key, and \n 

    for category_success in sorted(result_fruit[mime]): 
      writer.writerow('{}'.format(result_fruit[mime][category_success])) 

     # does a writerow for each element of the list. 

等效動作元素,與普通的字典和打印

In [200]: dd = {'word': [5,4], 'pdf':[1,3]} 
In [201]: for key in dd: 
    ...:  print(key) 
    ...:  for v in dd[key]: 
    ...:   print(v) 
    ...:   
word 
5 
4 
pdf 
1 
3 

你想要一個文件寫入的內容更像是這樣的:

In [205]: for key in dd: 
    ...:  print(key, end='\t') 
    ...:  for v in dd[key]: 
    ...:   print(v, end='\t') 
    ...:  print() 
    ...:  
word 5 4 
pdf  1 3 

您甚至可以堅持使用print函數並添加file參數。

我不使用csv模塊足以建議一個直接的解決方案。