使用requests模块导出csv文件
我刚开始学习Python,想把我的数据导出到一个csv文件里,但我不知道怎么去掉所有的括号和逗号。理想情况下,我需要两列:一列是“count”的所有值,另一列是“month”的值。
任何建议都很感谢。
我的代码:
from sunlight import capitolwords
import requests
import csv
r = requests.get ('http://capitolwords.org/api/1/dates.json?phrase=guns&start_date=2011-
12-01&end_date=2013-01-
15&granularity=month&sort=count&apikey=ab02633fb17841d09f4c3660e0384ae5')
data = r.text
ifile = open('guns.csv', 'rb')
reader = csv.reader(data.splitlines(), delimiter=',')
for row in reader:
print row
结果:
['{']
[' "results": [']
[' {']
[' "count": 62.0', '']
[' "month": "201212"']
[' }', '']
[' {']
[' "count": 36.0', '']
[' "month": "201207"']
[' }', '']
[' {']
[' "count": 35.0', '']
[' "month": "201112"']
[' }', '']
[' {']
[' "count": 27.0', '']
[' "month": "201202"']
[' }', '']
[' {']
[' "count": 27.0', '']
3 个回答
2
如果不一定要用CSV这个包,你可以用普通的输出操作来保存文件,然后把文件命名为CSV。其实CSV文件就是一个文本文件,里面的内容是用逗号分开的。
下面是你可以这样做的示例。
with open("abc.csv","w+") as fh:
str = "count: 62.0"
str = str + ",month: 201212"
fh.writeline(str)
3
我想对@thikonom上面说的内容补充一点解释。
r.json()
当你使用 r.json() 时,你是在把 r 里的内容当作 json 来理解。你发送的查询字符串中有个提示,告诉你数据是 json 格式。如果你对 json 有所了解,结果看起来也确实像 json。
r.json()["results"]
现在你是在告诉 json 去查找 r 里的字典,寻找键为 results 的内容。能够看到你从查询中期待得到的结果是很有帮助的,这里的 results 就是在你上面粘贴的结果中显示的。我们也能看到它是以字典的标准方式展示的:
{'results': [{'month': '201212', 'count': 62.0}...
等等。在这个例子中,results 是 key,而在 : 后面的数据被认为是 key 的值。使用 ~> r.json()["results"] <~ 可以返回 results 的值。不过,你会注意到 'month' 和 'count' 也被包裹在 {} 中,这意味着它们各自也是键值对。这就意味着你有了嵌套的字典!
f.writerow([elem["count"], elem["month"]])
接下来,逐行提取 count 和 month 这两个键的 value,然后把它们存储到你的 *.csv 文件中。
希望这能帮助到其他人!
6
因为返回的数据是Json格式的,所以可以用下面的代码来加载这些Json数据:
data = r.json()["results"] # read the json response and keep the results part
然后再用下面的代码把这些数据写入到csv文件中:
with open("guns.csv", "wb") as csvfile:
f = csv.writer(csvfile)
f.writerow(["Count", "Month"]) # write the headers if you like
for elem in data:
f.writerow([elem["count"], elem["month"]])