簡體   English   中英

python字典到csv文件

[英]python dictionary to csv file

我正在將字典的內容寫入csv文件。 我字典的k,v對是{int:整數列表}。 當將其寫入文件=>時,我看到一個有趣的事情,當列表的大小為1時,它將打印為列表。 當列表的大小較大時,它將打印為字符串(雙引號)。 這是示例輸出(如輸出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

可能出什么問題了? 我試圖在所有階段打印dict值...它們只是列表。 不知道如何將它們轉換為字符串。 我只是不想在輸出的csvfile中使用雙引號。

任何幫助表示贊賞。

列表以列表的字符串表示形式發送到csv文件。 如果列表中有多個項目,則需要在csv文件中加引號,因此,將列表中的項目定界的逗號不會誤認為是將csv文件中的字段定界的逗號。

CSV文件中唯一的數據類型是字符串。 如果您使用csv模塊將該csv文件重新讀回到python,則會返回["25", "[-1962956450172838896]"]作為第2行的值,以及["26", "[-125, -12323459939, -2323445, -345425]"]用於第3行。

如果要避免在列表中加引號,則可以在創建csv文件時通過設置delimiter參數來使用其他定界符。 制表符分隔的( \\t )在這里可以很好地工作。

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

每行的第一個元素是鍵,后續元素是關聯的列表值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM