使用请求模块导出csv

时间:2013-01-27 17:28:28

标签: python export-to-csv python-requests

我是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 个答案:

答案 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)