python字典到csv文件
我正在将一个字典的内容写入一个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中使用双引号。
任何帮助表示赞赏。
将列表作为列表的字符串表示形式发送到csv文件。当列表中有多个项目时,需要在csv文件中引用它们,以便在列表中分隔项目的逗号不会被误认为用于分隔csv文件中的字段的逗号。
csv文件中唯一的数据类型是字符串。如果您重读csv文件放回使用CSV模块蟒蛇,你会得到["25", "[-1962956450172838896]"]
作为第2行和["26", "[-125, -12323459939, -2323445, -345425]"]
为3行
值。如果你想避免你的清单报价,你可以使用不同的通过在创建csv文件时设置delimiter
参数来定界分隔符。制表符分隔(\t
)在这里可能很好地工作。
这应该是粗体,突出显示和下划线:csv文件中的唯一类型是字符串。 – Tom
非常感谢您的解释。我已经开始使用制表符分隔符。 – user1717931
的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
每一行的第一个元素是关键,随后的要素是相关联列表值
它们都作为列表的字符串表示被发送到csv文件。当列表中有多个项目时,它需要在csv文件中引用,因此用于分隔列表中项目的逗号不会被误认为用于分隔csv文件中的字段的逗号。如果您使用csv模块将该csv文件重新读入python。您将返回行['25','[ - 1962956450172838896]“]'作为行2的值,''”26“,”[-125,-12323459939,-2323445,-345425]“]'行3. csv文件中唯一的类型是字符串。 –
有不同口味的csv。正如史蒂文指出的,由于逗号含糊不清,需要引用含逗号的列表表示。您可以更改为使用分号作为项目分隔符的csv风格,或者即使不必要也使用引号来获取单迭代和多迭代列表的类似输出。 有关详细信息,请参阅csv模块的python文档,特别是方言部分: (https://docs.python.org/3/library/csv.html#csv.Dialect) – pixelbrei
不带引号,您的csv文件不起作用,并且不可读... – njzk2