python字典到csv文件

时间:2016-01-13 19:17:25

标签: python csv dictionary

我正在将字典的内容写入csv文件。我的字典的k,v对是{int:ints of list}。当它被写入文件时,我看到一个有趣的事情=>当列表的大小为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中使用双引号。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

将列表作为列表的字符串表示形式发送到csv文件。如果列表中有多个项目,则需要在csv文件中引用,因此分隔列表中项目的逗号不会被误认为是用于分隔csv文件中字段的逗号。

csv文件中唯一的数据类型是string。如果你使用csv模块将csv文件重新读回python,你会得到["25", "[-1962956450172838896]"]作为第2行的值,["26", "[-125, -12323459939, -2323445, -345425]"]作为第3行。

如果您希望避免引用列表,则可以在创建csv文件时通过设置delimiter参数来使用不同的分隔符。制表符分隔(\t)可能在这里很好用。

答案 1 :(得分: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

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