Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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
将json对象保存到csv文件python_Python_Json_Csv - Fatal编程技术网

将json对象保存到csv文件python

将json对象保存到csv文件python,python,json,csv,Python,Json,Csv,我正在尝试将从网页中刮取的json对象保存到csv文件中以进行地理处理。代码如下: from bs4 import BeautifulSoup import json import urllib2 import csv import os import requests import re page1 = urllib2.urlopen("http://runkeeper.com/user/212579518/route/513771") soup = BeautifulSoup(page1)

我正在尝试将从网页中刮取的json对象保存到csv文件中以进行地理处理。代码如下:

from bs4 import BeautifulSoup
import json
import urllib2
import csv
import os
import requests
import re

page1 = urllib2.urlopen("http://runkeeper.com/user/212579518/route/513771")
soup = BeautifulSoup(page1)

point_re = re.compile('.*routePoints =(.*);')
point_json = point_re.search(str(soup)).group(1)
point_data = json.loads(point_json)

##thislineworks
with open('test2.csv','wb') as f:
    w = csv.writer(f)
    w.writerows(point_data())
point_data = json.loads(point_json)

##thislineworks
with open('test2.csv','wb') as f:
    w = csv.writer(f)
    w.writerows(point_data())
当我执行代码时,我收到以下消息:

Traceback (most recent call last):
  File "C:\Users\Jesus\Desktop\scrapping1advance1.py", line 19, in <module>
    w.writerows(point_data())
TypeError: 'list' object is not callable
回溯(最近一次呼叫最后一次):
文件“C:\Users\Jesus\Desktop\scassing1advance1.py”,第19行,在
w、 writerows(点\数据())
TypeError:“列表”对象不可调用
你知道我做错了什么吗


谢谢

您的错误与代码有关:

from bs4 import BeautifulSoup
import json
import urllib2
import csv
import os
import requests
import re

page1 = urllib2.urlopen("http://runkeeper.com/user/212579518/route/513771")
soup = BeautifulSoup(page1)

point_re = re.compile('.*routePoints =(.*);')
point_json = point_re.search(str(soup)).group(1)
point_data = json.loads(point_json)

##thislineworks
with open('test2.csv','wb') as f:
    w = csv.writer(f)
    w.writerows(point_data())
point_data = json.loads(point_json)

##thislineworks
with open('test2.csv','wb') as f:
    w = csv.writer(f)
    w.writerows(point_data())
点_数据
不是一个函数。使用:

point_data = json.loads(point_json)

##thislineworks
with open('test2.csv','wb') as f:
    w = csv.writer(f)
    w.writerows(point_data) #notice there are no parens here

我尝试了您建议的代码,但它返回了以下错误:回溯(上次的最新调用):文件“C:\Users\Jesus\Desktop\Scrasting1AAdvance1.py”,第18行,在w.writerows(point_data)中错误:sequence Expected the
point_data=json。loads(point_json)
未将point_data分配给序列。现在是使用pythonshell(比如IDLE)并在shell中通过自己键入每一行来运行脚本的好时机。分配点_数据后,将其打印到屏幕上,以查看数据类型。如果将
w.writerow
更改为
w.writerow
,则此功能可能有效。但我猜这不是您想要的。当我将代码更改为write.row(point_json)时,它会使用以下格式将所有观测值保存在一行:{u'althip':40,u'longitude':-77.036478,u'deltaDistance':0,u'lation':38.918704,u'type':u'StartPoint',u'deltaPause':0}然而,我希望这个输出看起来更像一个数据帧。有什么办法吗?@jesusleal-Yup。这就是我所说的“猜测这不是你想要的”的意思。看看你正在拆下的站点,我想你可能想抓住整个json行,而不是一行?如果是这样,那么在创建正则表达式时,您将希望使用re.MULTILINE标志。然后您可以使用
writerows
方法谢谢您的帮助。所以我检查了创建的对象,它是一个字典列表。有了这段代码,我得到了我所需要的:
keys=[‘海拔’、‘经度’、‘deltaDistance’、‘纬度’、‘类型’、‘deltaPause’],其中open('test3.csv’、'wb')作为f:dict_writer=csv.dict_writer(f,keys)dict_writer.writer.writerow(keys)dict_writer.writerows(point_data)