我使用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)
发布于 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'}
https://stackoverflow.com/questions/56657358
复制相似问题