2016-01-13 133 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 

每一行的第一个元素是关键,随后的要素是相关联列表值