【问题标题】:Using requests module to export csv使用 requests 模块导出 csv
【发布时间】:2013-01-27 17:28:27
【问题描述】:

我是 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', '']

【问题讨论】:

  • 您说您正在尝试导出数据,但您的代码只显示了一个CSV 阅读器。那是怎么回事?在任何情况下,csv.reader 的第一个参数必须是文件句柄,而不是代码中的字符串列表。

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


【解决方案1】:

由于响应是 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"]])

【讨论】:

    【解决方案2】:

    我想对@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"]])
    

    逐行检查,取出两个键的countmonth,然后将它们存储到* .csv 文件。

    希望这对其他人有帮助!

    【讨论】:

      【解决方案3】:

      如果 CSV 包不是强制性的,您可以使用正常的输出操作并使用 CSV 保存文件。 CSV 只是一个 txt 文件,其中 cols 用逗号分隔。

      这里是如何做到这一点的。

      with open("abc.csv","w+") as fh:
          str = "count: 62.0"
      
          str = str + ",month: 201212" 
      
          fh.writeline(str)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-01
        相关资源
        最近更新 更多