【发布时间】:2015-05-18 19:09:10
【问题描述】:
我有一个 CSV 文件,我正在从中读取一些字段(列)到字典中(这样一列用作键,另一列用作值)。更准确地说,我有数字格式的键和字符串格式的值。但我这里有一个问题。在 CSV 文件中,我遇到了相同数字与多个字符串相关联的情况。因此,当我尝试将字典打印到 output.csv 文件时,它确实按照我想要的 (key:value) 格式打印它,但它忽略了键具有多个关联值的情况。据我观察,只有与该键关联的最新值被保留,旧值被覆盖。
例如: 999 测试1 999 测试1 999 测试2 999测试3
在这种情况下,只有 999:Test3 会打印在 output.csv 文件中。我需要的是,如果出现这样的情况,它应该在 output.csv 文件上打印一条消息,类似这样。
999:有多个测试
我该如何实现呢?这是我到目前为止编写的代码,用于将字典打印到输出文件。但是我需要一些帮助来合并上述期望的结果。
import csv
infile = open('input.csv',"rb")
reader = csv.reader(infile)
outfile = open('output.csv',"wb")
writer = csv.writer(outfile)
mydict = dict((rows[18],rows[19]) for rows in reader)
for key,value in mydict.items():
writer.writerow([key,value])
infile.close()
outfile.close()
感谢任何帮助。
谢谢!
【问题讨论】:
-
您是说在输入文件中,由于您正在读取第 18 列和第 19 列,因此第 18 列中可能存在与前一行具有相同值的行?
-
python 中的 dicts 具有唯一的键,因此您不能将超过 Test 分配给键。但是,您可以将列表分配给键。所以你可以做类似 999 [Test1, Test1, Test2, Test3] 的事情。
-
@mauve:是的,你是对的。我想识别这些行并相应地打印错误消息。
-
@lachance 是的,我会试试的
标签: python csv dictionary