首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我的csv-writer使用数据作为密钥,我如何修复它?

为什么我的csv-writer使用数据作为密钥,我如何修复它?
EN

Stack Overflow用户
提问于 2019-06-19 05:34:25
回答 1查看 33关注 0票数 0

我使用csv库将通过html表单收集的数据写入csv。写入器只在一定程度上工作,因为它将我的数据加倍为数据的关键字,使得以后无法访问它。我如何修复我的代码?

当然,作为一个完全的python初学者,我试图查找我的问题,但我没有找到任何合适的解决方案:/

# writes the valid data to the csv-file
with open("survey.csv", 'a') as file:
    writer = csv.DictWriter(file, fieldnames=["name", "gender", "preference"])
    writer.writerow({"name": request.form.get("name"), "gender": request.form.get("gender"), "preference": request.form.get("pets")})

我期望得到如下输出(当使用list(Reader)遍历各行时:

OrderedDict([('name', 'Adrian'), ('gender', 'male'), ('preference', 'dogs')])

相反,我得到了这样的结论:

OrderedDict([('Adrian', 'Adrian'), ('male', 'male'), ('dogs', 'dogs')])

这也是我的阅读器代码(可能有问题):

with open("survey.csv","r") as file:
    reader = csv.DictReader(file)
    participants = list(reader)
    for participant in participants:
        print(participant)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-19 05:53:57

您的问题是缺少标题,当使用csv.Dictwriter编写时,您需要首先使用writer.writeheader()编写标题

在您的例子中,您似乎是在尝试附加到文件中,所以我认为您需要有一个初始化步骤来创建带有头文件的文件,然后再按顺序附加到它。(否则,每次获取新表单时,都会将标题作为新行获取)

例如

In [2]: data
Out[2]:
[{'name': 'andrew', 'gender': 'm'},
 {'name': 'heather', 'gender': 'f'},
 {'gender': 'm', 'name': 'john'}]

In [3]: def start_file():
    ...:     with open('out.csv', 'w') as f:
    ...:         w = csv.DictWriter(f, fieldnames=['name', 'gender'])
    ...:         w.writeheader()
    ...:

In [4]: def write_out(row):
    ...:     with open('out.csv', 'a') as f:
    ...:         w = csv.DictWriter(f, fieldnames=['name', 'gender'])
    ...:         w.writerow(row)
    ...:

In [5]: start_file()

In [6]: for row in data:
    ...:     write_out(row)
    ...:

In [7]: with open('out.csv') as f:
    ...:     for row in csv.DictReader(f):
    ...:         print(dict(row))
    ...:
{'name': 'andrew', 'gender': 'm'}
{'name': 'heather', 'gender': 'f'}
{'name': 'john', 'gender': 'm'}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56657358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档