2013-10-03 50 views
2

我很難理解如何將csv的列表寫入csv,其中所有值均位於單獨的列中。在這裏,類似這樣的問題並沒有幫助我理解。我一直在使用DictWriter,但不知道如何在沒有錯誤的情況下提供dict.values(),'field x not in fieldnames'。將單詞列表寫入csv,並在單獨的列中輸入值

.....

dicts = [ 
    {'sku': 'xxxx1', 'model': '1234-56K', 'price': '$xxx.xx', 'name': 'item_name_here', 'stock': 'True'}, 
    {'sku': 'xxxx2', 'model': '1234-56K', 'price': '$xxx.xx', 'name': 'item_name_here', 'stock': 'False'} 
] 

csv_file = open('file.csv','wb') 
fieldnames = ('name', 'price', 'stock', 'model', 'sku') 
csvwriter = csv.DictWriter(csv_file, fieldnames, extrasaction='raise', dialect='excel') 
csvwriter.writeheader() 
csvwriter.writerows(dicts) 
return csv_file 

.....

這將返回我的價值在一列,但是當我遍歷類型的字典的值列表中它只是分裂所有的值(如字符串)轉換成's,t,r,i,n,g''仍然放入第一列。

+1

爲我工作...有更多的代碼,你不包括? – mlnyc

+1

你使用的是python3還是python2?我只是在python2.7中試過你的代碼,它似乎工作得很好。 – zzzirk

+0

請注意,列出現在excel程序中的方式與寫入csv文件的方式不同。使用LibreOffice的Calc顯示我用Python編寫的csv文件時,我遇到了非常煩人的問題,但問題在於程序使用分隔符將數據拆分爲列。 –

回答

1

從文檔的csv.DictWriter()

如果傳遞給writerow()方法的字典包含字段名沒有找到關鍵,可選extrasaction參數指示採取何種措施。如果它被設置爲'raise',則會引發ValueError。如果它設置爲'忽略',字典中的額外值將被忽略。

如果這是你所得到的錯誤,請嘗試:
csv.DictWriter(csv_file, fieldnames, extrasaction='ignore', dialect='excel')

+0

如果列表中有一個字段有一個未知的字段名,'extrasaction ='raise''肯定能夠得到'字段x不在字段名'錯誤。 – martineau

+0

有問題的字跡是來自刮削項目的自定義字跡。沒有任何額外的鍵我沒有考慮,但可能有一些缺失的值,所以我想我應該使用這個。不幸的是,我沒有看到任何消除它的變化! –

+0

我認爲你得到了ValueError。也許發佈追蹤? – wwii

0

嘿,我寫了這個針對Python 2.7

這個函數的詞典列表並輸出CSV。它還包括選項來設置字段名的字段順序,defaultFieldValues,的SortField和選項刪除重複

https://gist.github.com/brendancol/6816393

def write_csv(outputRowDictionaries, outputFile, fieldNames=None, defaultFieldValue='', removeDuplicates=False, sortField=None): 
.... 
+0

請在答案中張貼您答案的代碼。 – martineau