使用requests模块导出csv文件

3 投票
3 回答
10014 浏览
提问于 2025-04-17 13:50

我刚开始学习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}...

等等。在这个例子中,resultskey,而在 : 后面的数据被认为是 key 的值。使用 ~> r.json()["results"] <~ 可以返回 results 的值。不过,你会注意到 'month''count' 也被包裹在 {} 中,这意味着它们各自也是键值对。这就意味着你有了嵌套的字典!

f.writerow([elem["count"], elem["month"]])

接下来,逐行提取 countmonth 这两个键的 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"]])

撰写回答