0

我正在尝试编写一个 python 脚本,它将从 http 服务器检索值并将数据更改为 csv 格式,我正在使用 httplib2 库来执行请求,但我的问题是内容的返回在 application/x -www-form-urlencoded 格式,我有将数据解析为字典的代码,但似乎无法将其作为这种字符串做任何事情,我知道对于广大用户来说这似乎很简单,因为我可以'似乎没有通过研究找到任何有关此的信息...

下面是一个示例代码,只是为了说明我正在尝试做的事情的类型和我的问题

import httplib2
http = httplib2.Http()

resp, content = http.request("http://example.com/foo/bar")

感谢您的帮助

顺便说一句,我使用的是 python 2.7,请求自然返回的格式是 json

4

1 回答 1

2

如果您收到编码响应,您可以使用urllib.unquote将转义字符替换为其“实际”表示。完成此操作后,您可以使用该json模块将字符串加载为 Python 对象,然后使用该csv模块根据响应创建 CSV。您的回复结构将决定您的最终设置方式,但希望这会让您走上正确的道路:

In [1]: import csv

In [2]: import json

In [3]: import urllib

In [4]: json_resp = urllib.quote('[{"name": "John Doe", "age": 35}, {"name": "Jane Doe", "age": 33}]')

In [5]: json_resp # What I believe your response looks like
Out[5]: '%5B%7B%22name%22%3A%20%22John%20Doe%22%2C%20%22age%22%3A%2035%7D%2C%20%7B%22name%22%3A%20%22Jane%20Doe%22%2C%20%22age%22%3A%2033%7D%5D'

In [6]: resp = urllib.unquote(json_resp) #'Unquote' the response

In [7]: resp
Out[7]: '[{"name": "John Doe", "age": 35}, {"name": "Jane Doe", "age": 33}]'

In [8]: content = json.loads(resp) # Turn the resp into a Python object

In [9]: fieldnames = ('name', 'age') # Specify the order in which to write fields

In [10]: with open('mycsv.csv', 'wb') as f:
   ....:     writer = csv.DictWriter(f, fieldnames)
   ....:     writer.writeheader() # Python 2.7+
   ....:     for item in content:
   ....:         writer.writerow(item)
   ....:
   ....:

这将编写一个如下所示的 CSV:

name,age
John Doe,35
Jane Doe,33
于 2012-12-03T15:35:20.667 回答