我是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', '']
答案 0 :(得分: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"]])
答案 1 :(得分:2)
我想对@thikonom上面所说的内容添加一些解释。
r.json()
当您使用r.json()时,您将 r 中的内容解释为 json 。在您发送的查询字符串中,您的数据被提示为json。如果你熟悉json,结果看起来也像json。
r.json()["results"]
您现在告诉json使用密钥结果在字典中搜索结果 r 。能够看到您对查询的期望是一个很大的帮助,其中结果会显示在您粘贴到上面窗口的结果中。我们也认识到它以标准的方式显示字典:
{'results': [{'month': '201212', 'count': 62.0}...
等等。 结果在这种情况下是键,:之后的其余数据被视为键的值。使用〜> r.json()[“results”]<〜返回结果值。但是,您会注意到'月'和'计数'也包含在{}中,这意味着它们本身就是键值对。这意味着你有词典嵌套在词典中!
f.writerow([elem["count"], elem["month"]])
逐行完成,取出两个键的值:计数和月,然后存储到您的*中.csv文件。
希望这可以帮助别人!
答案 2 :(得分:1)
如果CSV包不是必需的,您可以使用正常输出操作并使用CSV保存文件。 CSV只是一个txt文件,其中cols用逗号分隔。
在这里你可以做到这一点。
with open("abc.csv","w+") as fh:
str = "count: 62.0"
str = str + ",month: 201212"
fh.writeline(str)