2016-01-13 163 views
1

我正在將一個字典的內容寫入一個csv文件。我的字典中的k,v對是{int:整數列表}。當它被寫入文件時,我看到一個有趣的事情=>當列表的大小是1時,它將打印爲一個列表。當列表的大小更大時,它將打印爲一個字符串(用雙引號括起來)。下面是一個例子輸出(如被看見在輸出csv文件):python字典到csv文件

24,[-12345] 
25,[-1962956450172838896] 
26,"[-125, -12323459939, -2323445, -345425]" 
27,[-730881498578617677] 
20,[4001623946089138114] 
21,[-12345] 

我用下面的代碼寫入文件:

def dictToCsv(dictionary, csvfile): 
    writer = csv.writer(open(csvfile, 'wb')) 
    for key, value in dictionary.items(): 
     writer.writerow([key, value]) 

我肯定,所有的值都是整數的列表。

我創建字典這樣(爲簡便起見,我已經縮短了代碼):

memberList = [] 
d = {} 

with open(inputCsvFile) as f_in: 
    for line in f_in: 
    pair = line.split(',') 
    cid = pair[0] 
    member = pair[1] 
    value = member.strip() 
    memberList.append(int(value)) 
    d[cid] = memberList 

可能是什麼回事?我試圖在所有階段打印字典值......並且它們只是列表。不知道他們如何被轉換爲字符串。我只是不想在我的輸出csvfile中使用雙引號。

任何幫助表示讚賞。

+3

它們都作爲列表的字符串表示被髮送到csv文件。當列表中有多個項目時,它需要在csv文件中引用,因此用於分隔列表中項目的逗號不會被誤認爲用於分隔csv文件中的字段的逗號。如果您使用csv模塊將該csv文件重新讀入python。您將返回行['25','[ - 1962956450172838896]「]'作爲行2的值,''」26「,」[-125,-12323459939,-2323445,-345425]「]'行3. csv文件中唯一的類型是字符串。 –

+1

有不同口味的csv。正如史蒂文指出的,由於逗號含糊不清,需要引用含逗號的列表表示。您可以更改爲使用分號作爲項目分隔符的csv風格,或者即使不必要也使用引號來獲取單迭代和多迭代列表的類似輸出。 有關詳細信息,請參閱csv模塊的python文檔,特別是方言部分: (https://docs.python.org/3/library/csv.html#csv.Dialect) – pixelbrei

+0

不帶引號,您的csv文件不起作用,並且不可讀... – njzk2

回答

2

將列表作爲列表的字符串表示形式發送到csv文件。當列表中有多個項目時,需要在csv文件中引用它們,以便在列表中分隔項目的逗號不會被誤認爲用於分隔csv文件中的字段的逗號。

csv文件中唯一的數據類型是字符串。如果您重讀csv文件放回使用CSV模塊蟒蛇,你會得到["25", "[-1962956450172838896]"]作爲第2行和["26", "[-125, -12323459939, -2323445, -345425]"]爲3行

值。如果你想避免你的清單報價,你可以使用不同的通過在創建csv文件時設置delimiter參數來定界分隔符。製表符分隔(\t)在這裏可能很好地工作。

+0

這應該是粗體,突出顯示和下劃線:csv文件中的唯一類型是字符串。 – Tom

+0

非常感謝您的解釋。我已經開始使用製表符分隔符。 – user1717931

0

的dictToCsv需要固定這樣

def dictToCsv(dictionary, csvfile): 
    writer = csv.writer(open(csvfile, 'wb')) 
    for key, value in dictionary.items(): 
     # writer.writerow([key, value]) << wrong 
     writer.writerow([key] + value) 

這將產生一個csv文件,看起來像:

20,4001623946089138114 
21,-12345 
24,-12345 
25,-1962956450172838896 
26,-125,-12323459939,-2323445,-345425 
27,-730881498578617677 

每一行的第一個元素是關鍵,隨後的要素是相關聯列表值