【发布时间】:2016-01-14 07:37:51
【问题描述】:
我正在将字典的内容写入 csv 文件。我的字典中的 k,v 对是 {int: list of ints}。当它被写入文件时我看到了一件有趣的事情=>当列表的大小为一时,它打印为一个列表。当列表的大小更大时,它会打印为字符串(在双引号中)。这是一个示例输出(如输出 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 文件重新读回 python。您将返回
["25", "[-1962956450172838896]"]作为第 2 行的值和["26", "[-125, -12323459939, -2323445, -345425]"]作为第 3 行的值。csv 文件中的唯一类型是字符串。 -
有不同风格的 csv。正如 Steven 所指出的,由于逗号的歧义,需要引用包含逗号的列表表示。您可以更改为使用分号作为项目分隔符的 csv 风格,或者即使没有必要也使用引号,以获得单项和多项列表的类似输出。详情请看csv模块的python文档,尤其是方言部分:(docs.python.org/3/library/csv.html#csv.Dialect)
-
如果没有引号,您的 csv 文件将无法工作,并且无法读取...
标签: python csv dictionary