【问题标题】:Python: CSV Writer Dictionary Foor LoopPython:CSV Writer 字典 For 循环
【发布时间】:2013-12-30 09:04:05
【问题描述】:

这是我的问题:

我有一本字典。

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|。这不是我想要的。我希望键及其对应的值占据整个单元格,如下所示:键1 |键2 |或 |值1 |值2 |。

我这样做的原因是因为我想格式化 csv 文件,使其有两列,一列用于键,另一列用于对应的值。

我查看了 Stack,人们建议将列表放入 writerows(),我已经这样做了,但是当我使用 for 循环时这不起作用。有一个解决方案说要执行 writerows([dictionary.keys()]),并在单独的单元格中打印所有键,但在一行中。我不想要那个。

任何修复?

【问题讨论】:

    标签: python csv dictionary


    【解决方案1】:

    我这样做的原因是因为我想格式化 csv 文件,使其有两列,一列用于键,另一列用于对应的值。

    如果您不关心行在字典中出现的顺序,可以通过将iteritems 传递给writerows 来完成。或items 在 Python 3.x 上。

    with open("file.csv") as f:
        datawriter = csv.writer(f)
        datawriter.writerows(dictionary.iteritems())
    

    如果您确实关心顺序,您应该可以在dictionary.iteritems() 上使用sorted,但您可能需要根据您需要的排序行为指定自定义排序键函数。

    writerows 期望一个可迭代对象,其中包含要写入的每一行的一个条目。每个条目本身应该是可迭代的,为要写入的每一列产生一个条目。由于您希望每个键/值对位于单独的行上,因此主迭代应该为字典中的每个键/值对产生一个迭代,iteritems 正是这样做的。

    您在尝试的解决方案中看到了不需要的行为,因为您使用单维列表调用 writerows。您的列表中有一个元素,因此它写入一行,但主要迭代产生的迭代是一个简单的字符串。遍历字符串会得到每个字符,这就是每个字符出现在单独列中的原因。

    【讨论】:

      【解决方案2】:

      要将字典写入 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()
      

      【讨论】:

        猜你喜欢
        • 2022-11-17
        • 1970-01-01
        • 2020-09-13
        • 1970-01-01
        • 2015-01-24
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        相关资源
        最近更新 更多