Python中将zip列表保存为csv

8
我该如何在Python中将下面的zip列表写入CSV文件?
[{'date': '2015/01/01 00:00', 'v': 96.5},
 {'date': '2015/01/01 00:01', 'v': 97.0},
 {'date': '2015/01/01 00:02', 'v': 93.75},
 {'date': '2015/01/01 00:03', 'v': 96.0},
 {'date': '2015/01/01 00:04', 'v': 94.5}

我遇到了以下错误:

_csv.Error: sequence expected

我的代码在这里:

import csv
res = zip_list
csvfile = "/home/stm/PycharmProjects/isbak_trafik/example.csv"

with open(csvfile, "w") as output:
    writer = csv.writer(output, lineterminator='\n')
    writer.writerows(res)

1
字典不是序列。请使用 csv.DictWriter。或者写入 dict.values() - Peter Wood
3个回答

2

我发现csv.DictWriter在其操作中不够透明,因此建议按照以下步骤进行操作:

with open(csvfile, "w") as output:
    output.write(';'.join(list(res[0].keys()))+"\n")
    [output.write(';'.join(list(map(str, r.values())))+"\n") for r in res]

1
代码示例的最后一行只是一个技巧,让你可以将其写在一行中。但不应忘记,这不被 PEP8 代码风格指南推荐。 - Gerhard Hagerer
1
谢谢。但是,我的csv文件中只有“date”和“v”。然而,我想把这些数值添加到我的csv文件中。请问你能帮我吗?@GerhardHagerer [{'date': '2015/01/01 00:00', 'v': 96.5}, {'date': '2015/01/01 00:01', 'v': 97.0}, {'date': '2015/01/01 00:02', 'v': 93.75}] - serenade
抱歉,我更正了代码示例。我测试过了,在我的Python3 shell中可以正常工作。 - Gerhard Hagerer
感谢您的帮助!@GerhardHagerer - serenade

2
你可以使用Python的DictWriter来实现。你可以传递列标题列表,这样可以确保输出中的列顺序符合要求。只有在此列表中的列才会被写入到你的输出文件中:
import csv

zip_list = [
    {'date': '2015/01/01 00:00', 'v': 96.5},
    {'date': '2015/01/01 00:01', 'v': 97.0},
    {'date': '2015/01/01 00:02', 'v': 93.75},
    {'date': '2015/01/01 00:03', 'v': 96.0},
    {'date': '2015/01/01 00:04', 'v': 94.5}]

csvfile = "/home/stm/PycharmProjects/isbak_trafik/example.csv"

with open(csvfile, "wb") as output:
    writer = csv.DictWriter(output, fieldnames=['date', 'v'])
    writer.writeheader()
    writer.writerows(zip_list)

这将产生以下输出:
date,v
2015/01/01 00:00,96.5
2015/01/01 00:01,97.0
2015/01/01 00:02,93.75
2015/01/01 00:03,96.0
2015/01/01 00:04,94.5

谢谢!@MartinEvans - serenade

1

writer.writerows期望写入CSV文件的单行数据是一个值序列。

使用您的原始代码:

import csv
res =[{'date': '2015/01/01 00:00', 'v': 96.5}, {'date': '2015/01/01 00:01', 'v': 97.0}, {'date': '2015/01/01 00:02', 'v': 93.75}, {'date': '2015/01/01 00:03', 'v': 96.0}, {'date': '2015/01/01 00:04', 'v': 94.5}]
csvfile = "example.csv"
with open(csvfile, "w") as output:
  writer = csv.writer(output, lineterminator='\n')
  for line in res:
    date = line['date']
    value = line['v']
    writer.writerow([date, value])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接