Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用dictwriter在csv文件中写入数据_Python_Json_Python 3.x_Csv_Web Scraping - Fatal编程技术网

Python 无法使用dictwriter在csv文件中写入数据

Python 无法使用dictwriter在csv文件中写入数据,python,json,python-3.x,csv,web-scraping,Python,Json,Python 3.x,Csv,Web Scraping,我用python编写了一个脚本,用api从网页上刮取一些项目名称,估计时间,以及评论,审查者和评级连接到每个项目名称,并将它们写入csv文件。问题是我下面的脚本可以相应地解析数据,但我不能将它们写入csv文件 但是,当我尝试将它们写入csv文件时,会出现以下错误: Traceback (most recent call last): File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\demo000000.py", lin

我用python编写了一个脚本,用api从网页上刮取一些
项目名称
估计时间
,以及
评论
审查者
评级
连接到每个
项目名称
,并将它们写入csv文件。问题是我下面的脚本可以相应地解析数据,但我不能将它们写入csv文件

但是,当我尝试将它们写入csv文件时,会出现以下错误:

Traceback (most recent call last):
  File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\demo000000.py", line 71, in <module>
    w.writerow(reviews)
  File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\lib\csv.py", line 155, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
  File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\lib\csv.py", line 151, in _dict_to_list
    + ", ".join([repr(x) for x in wrong_fields]))
ValueError: dict contains fields not in fieldnames: 'reviews'
我们将非常感谢您对将刮取的数据写入csv文件的任何帮助。谢谢。

试试换衣服

w = csv.DictWriter(f,['name','eta','messg','reviewer','rating'])

上述错误表明,在写入CSV文件时,映射值不匹配。 根据需要对代码进行更改

 w = csv.DictWriter(f,['name', 'eta', 'reviews', 'reviewer', 'rating'])

 ...

 for texualreviews in req.json()['yelpReviews']:
   reviews_data = {'reviews':texualreviews['message'],'reviewer':texualreviews['reviewerName'],'rating':texualreviews['rating']}
   reviews['reviews'].append(reviews_data)
   w.writerow(reviews)
缔约国指出:

如果传递给
writerow()
方法的字典包含一个键,则 在FieldName中找到,可选的extrasaction参数指示 采取什么行动。如果设置为
'raise'
,则默认值为a
ValueError
被引发

writerow()
的调用将字典
reviews
作为参数传递,其键为
name
eta
reviews
。因此,
with
语句右下方的行应该是:

w=csv.DictWriter(f,['name','eta','reviews']

其他领域是不必要的;如果添加它们,它们将被填充为空。

@gboffi感谢您的编辑。我想用粗体突出显示答案的代码部分中不可能出现的更改。抱歉,使用标记在代码中不可能出现粗体部分。也许可以直接使用HTML来做你想做的事情——我的建议是“没有必要”。
w = csv.DictWriter(f,['name','eta', 'reviews','reviewer','rating'])
ValueError: dict contains fields not in fieldnames: 'reviews'
 w = csv.DictWriter(f,['name', 'eta', 'reviews', 'reviewer', 'rating'])

 ...

 for texualreviews in req.json()['yelpReviews']:
   reviews_data = {'reviews':texualreviews['message'],'reviewer':texualreviews['reviewerName'],'rating':texualreviews['rating']}
   reviews['reviews'].append(reviews_data)
   w.writerow(reviews)