我正在将字典的内容写入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中使用双引号。
感谢任何帮助。
答案 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
每行的第一个元素是键,后续元素是关联的列表值