【发布时间】:2020-05-15 09:30:26
【问题描述】:
我正在尝试将列表数据追加到 CSV 文件中。这是我的代码:
body = {
'dont-ask-for-email': 0,
'action': 'submit_user_review',
'post_id': 76196,
'email': email_random(),
'subscribe': 1,
'previous_hosting_id': prev_hosting_comp_random(),
'fb_token': '',
'title': review_title_random(),
'summary': summary_random(),
'score_pricing': star_random(),
'score_userfriendly': star_random(),
'score_support': star_random(),
'score_features': star_random(),
'hosting_type': hosting_type_random(),
'author': name_random(),
'social_link': '',
'site': '',
'screenshot[image][]': '',
'screenshot[description][]': '',
'user_data_process_agreement': 1,
'user_email_popup': '',
'subscribe_popup': 1,
'email_asked': 1
}
from csv import DictWriter
fields = ['DontAskForEmail','Action','PostID','Email','Subsribe','PreviousHostingID','FbToken','Title','Summary','Pricing','UserFriend']
def datasent(r3eData, body, fields):
with open(r3eData, 'a+', newline='') as writeData:
dict_writer = DictWriter(writeData, fieldnames = fields)
dict_writer.writerow(body)
datasent('r3edata.csv', body, fields)
当我运行它时,我得到了这个错误dict contains fields not in fieldnames:
这是回溯:
[root@b00gi3m4n boogieman]# python codeOffshoreupdated.py
https://www.facebook.com/AedanKerr
Traceback (most recent call last):
File "codeOffshoreupdated.py", line 120, in <module>
datasent('r3edata.csv', body, fields)
File "codeOffshoreupdated.py", line 119, in datasent
dict_writer.writerow(body)
File "/usr/lib64/python3.7/csv.py", line 155, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "/usr/lib64/python3.7/csv.py", line 151, in _dict_to_list
+ ", ".join([repr(x) for x in wrong_fields]))
ValueError: dict contains fields not in fieldnames: 'screenshot[description][]', 'email_asked', 'action', 'title', 'score_support', 'social_link', 'email', 'score_features', 'summary', 'score_pricing', 'author', 'previous_hosting_id', 'dont-ask-for-email', 'post_id', 'site', 'user_data_process_agreement', 'subscribe', 'fb_token', 'subscribe_popup', 'screenshot[image][]', 'hosting_type', 'score_userfriendly', 'user_email_popup'
我该如何解决这个问题?
另外,我还有一个问题。 我希望每 10 分钟更新一次此列表,并且我不想丢失每次更新的任何先前数据。这个方法是每次都会更新列表还是会覆盖以前的数据并更新新列表?
如果它会覆盖数据,我如何将新数据更新到新行中? (请原谅我的英语,如果你不明白,我可以在 cmets 中解释更多) 提前致谢
【问题讨论】:
-
你可以参考这个答案来解决你的错误:stackoverflow.com/a/26944519/6618812
-
好的,我会的。你也能回答我的问题吗?
-
答案就在你面前。
bodydict 有,例如dont-ask-for-email键,但您的查询中有一个DontAskForEmail字段。确保它们是相等的字符串(即在您的fields中传递dont-ask-for-email代替)。对于具有冲突字段的所有其他键也是如此。
标签: python python-3.x list python-2.7 export-to-csv