【问题标题】:Writing a dictionary to a CSV file [duplicate]将字典写入 CSV 文件 [重复]
【发布时间】:2012-12-17 02:52:20
【问题描述】:

可能重复:
Creating a dictionary from a CSV file

我在尝试将字典打印到 CSV 文件时遇到问题。该字典目前有 4 列,但所有 4 列都打印在 1 列中。这可能是我用来写入 CSV 文件的 for 循环的原因,但我不太确定。我正在尝试在每一列中打印字典。

样本数据:

     Date        First Name     Last Name     Score
12/28/2012 15:15        John          Smith        20
12/29/2012 15:15        Alex          Jones        38
12/30/2012 15:15      Michael       Carpenter      25

以下是部分代码摘录:

import csv

csvWriter = csv.writer(open("C:\\Users\\Chris\\Desktop\\test_out.csv", 'w'), delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL)

在上面的 CSV 文件中读取的 For 循环:

对于阅读器中的行:

for k, v in row.items():

    if not k in mydict:
        mydict[k] = [v]
    else:
        mydict[k].append(v)

For 循环将字典键打印到 CSV 文件。

for item in mydict.keys():
    csvWriter.writerow(item)

当前输出(列标题):

D a t e

F i r s t    N a m e

L a s t      N a m e

S c o r e

想要的输出(列标题):

Date      First Name       Last Name       Score

任何帮助将不胜感激。

【问题讨论】:

  • csvWriter.writerow(item) 没有意义。您每行只写一个项目...
  • 请阅读 writerow() 文档。很明显,您需要将所有列标题作为元组传递给 one writerow() 调用...这是基本的数据类型魔术。
  • 你知道我可以怎样改变它,使它在列而不是行中打印出来吗?我希望它读取 CSV 文件......做一些计算......然后以与它进来时相同的格式打印回一个 CSV 文件(如果有意义的话)。
  • 如果您只是想将字典保存在文件中(您似乎正在编写它并再次读取它),我不建议使用 CSV。相反,只是将字典序列化并将其写入文件,python 有一个非常好的模块,称为 Shelve,它很好地自动化了这个过程:docs.python.org/2/library/shelve.html
  • 你为什么对 CSV 文件使用 delimiter=' ',你不希望它是 delimiter=',' 这是默认值。

标签: python csv dictionary


【解决方案1】:

现在我更好地理解了你的结构,试试这个:

#first write column headers
csvWriter.writerow(list(mydict.keys())

#now data, assuming each column has the same # of values
for i in xrange(len(mydict['Date'])):
    csvWriter.writerow([mydict[k][i] for k in mydict.keys()])

【讨论】:

  • @Cahlan Sharp:当我尝试这样做时出现错误。回溯(最近一次调用最后):文件“C:\Users\Chris\Desktop\csv_reader3.py”,第 32 行,在 csvWriter.writerow(mydict.keys()) _csv.Error: sequence expected 不确定是什么错误的意思。
  • keys() 将返回一个迭代器,因此您必须将其包装到 list() 调用中。
  • @CRUSADER 感谢提醒,已编辑。
  • @ChrisPierce 查看最新编辑,我不确定您的 dict/list 中的数据结构是什么样的,但给定的代码应该可以帮助您入门。
  • @CahlanSharp 当我尝试打印出上面的键时,我在将键打印到列时出现错误。错误是“文件“C:\Users\Chris\Desktop\csv_reader3.py”,第 33 行,在 csvWriter.writerow(list(mydict[0].keys())) KeyError: 0 中。有什么想法吗?
【解决方案2】:

Python 2:

csvWriter.writerow(mydict.keys())

Python 3:

csvWriter.writerow(list(mydict.keys()))

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2014-04-12
    • 2012-05-09
    • 2014-06-30
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多