3

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

3 回答 3

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"]])
于 2013-01-27T17:35:25.743 回答
3

我想对@thikonom 上面所说的内容进行一些解释。

r.json()

当您使用 r.json() 时,您将r中的内容解释为json。在您发送的查询字符串中,提示您的数据是 json。如果你熟悉 json,结果也看起来像 json。

r.json()["results"]

您现在告诉 json 搜索结果r以查找带有键的字典:results。能够看到您对查询的期望是一个很大的帮助,其中结果显示在您粘贴到上面窗口的结果中。我们还认识到它以字典显示的标准方式显示:

{'results': [{'month': '201212', 'count': 62.0}...

等等。结果在这种情况下是键, :之后的其余数据被认为是键的值。使用 ~> r.json()["results"] <~ 返回结果值。但是,您会注意到'month''count'也包含在 {} 中,这意味着它们本身就是键值对。这意味着您有字典嵌套在字典中!

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

逐行遍历,提取两个键的值: countmonth,然后将其存储到 *.csv 文件中。

希望这可以帮助别人!

于 2016-04-08T04:26:29.740 回答
2

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

在这里你怎么能做到这一点。

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

    str = str + ",month: 201212" 

    fh.writeline(str)
于 2013-01-27T17:37:09.400 回答