这是我的问题:
我有一本字典。
dictionary = {"key1": "value1", "key2": "value2", "key3": value3}
我试图连续编写字典键以及下一行中的相应值。
with open("file.csv") as f:
datawriter = csv.writer(f)
for i in dictionary:
datawriter.writerows([i])
datawriter.writerows([dictionary[i]])
当我打开csv文件时,键的字母及其对应的值占用不同的单元格。所以它看起来像这样:| k | e | y | 1 |或| v | a | l | u | e |。这不是我想要的。我希望键及其对应的值占用整个单元格,如下所示:| key1 | key2 |或者value1 | value2 |。
我之所以这样做是因为我想格式化csv文件,因此它有两列,一列用于键,另一列用于相应的值。
我已经浏览了Stack,人们已经建议将一个列表放入writer(),我已经完成了,但是当我使用for循环时,这并不起作用。有一个解决方案,说要做writerows([dictionary.keys()]),并在单独的单元格中打印所有键,但是在一行中。我不想要那个。
任何修复?
答案 0 :(得分:2)
我之所以这样做是因为我想格式化csv文件,因此它有两列,一列用于键,另一列用于相应的值。
如果您不关心行在dict中出现的顺序,可以将iteritems
传递给writerows
来完成。或者是Python 3.x上的items
。
with open("file.csv") as f:
datawriter = csv.writer(f)
datawriter.writerows(dictionary.iteritems())
如果您关心订单,则应该能够sorted
使用dictionary.iteritems()
,但您可能需要根据所需的排序行为指定自定义排序键功能。
writerows
期望一个iterable,其中包含每行要写入的一个条目。每个条目本身应该是可迭代的,为每个要写入的列产生一个条目。由于您希望每个键/值对位于一个单独的行上,因此主要的iterable应该为字典中的每个键/值对产生一个可迭代的值,iteritems
就是这样。
您在尝试的解决方案中看到了不受欢迎的行为,因为您正在使用单维列表调用writerows
。列表中有一个元素,因此它会写入一行,但主可迭代产生的可迭代是一个简单的字符串。迭代字符串会为您提供每个字符,这就是每个字符出现在单独列中的原因。
答案 1 :(得分:0)
用于将字典写入csv文件,您可以使用字典迭代器。 dict.items()函数返回一个键值对作为元组。 csvwriter.writerow()需要列表/元组。
import csv
dictionary = {"key1": "value1", "key2": "value2", "key3": "value3"}
with open("file.csv","wb") as csv_file:
csv_writer = csv.writer(csv_file)
for key, value in dictionary.items():
csv_writer.writerow([key,value])
csv_file.close()
或者你也可以传递元组。
import csv
dictionary = {"key1": "value1", "key2": "value2", "key3": "value3"}
with open("file.csv","wb") as csv_file:
csv_writer = csv.writer(csv_file)
for key_value_tuple in dictionary.items():
csv_writer.writerow(key_value_tuple)
csv_file.close()