Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从http请求python返回的格式化_Python_Http_Parsing_Request_Url Encoding - Fatal编程技术网

从http请求python返回的格式化

从http请求python返回的格式化,python,http,parsing,request,url-encoding,Python,Http,Parsing,Request,Url Encoding,我正在尝试编写一个python脚本,它将从http服务器检索值并将数据更改为csv格式,我正在使用httplib2库来执行请求,但我的问题是返回的内容是application/x-www-form-urlencoded格式,我有用于将数据解析为dict的代码,但似乎不能用它做任何事情,因为这种字符串,我知道它可能对广大用户来说很简单,因为我似乎无法通过研究找到任何关于它的信息 下面是一个示例代码,只是为了说明我正在尝试做的事情的类型和我的问题 import httplib2 http = htt

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

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

import httplib2
http = httplib2.Http()

resp, content = http.request("http://example.com/foo/bar")
谢谢你的帮助


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

如果您收到的是编码响应,您可以使用
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

感谢您的回复,我已经增加了它,因为这是一个非常好的答案,虽然我应该指定我收到的“内容”在我看来像json,但我不确定是否发布准确的回复,因为我正在检索发票。但是它看起来像是在第7行,还有另外两个维度,尽管如果我尝试将它传递到json.loads()函数中,它会返回一个ValueError:没有json对象。。。这似乎很奇怪,我已经试过了我能在网上找到的所有其他解决方案web@jbaldwin啊,明白了,这使它变得更简单:)所以需要检查的一件事就是响应本身-它是否以有效的格式出现,意思是用双引号括住对符,所有的
{
都与结束
}匹配吗
,所有列表正确关闭,没有额外的逗号,等等。你可以用一个基本的、有效的JSON字符串(如上面的示例)测试你当前的技术-如果它有效,响应本身就会有问题。当我把我的代码放在这里时,我在某个论坛上使用了一个链接到的JSON“检查器”,上面说“第45行的分析错误:。。。“v”:(2010年,--------------------------^预期为‘STRING’、‘NUMBER’、‘NULL’、‘TRUE’、‘FALSE’、‘‘’、‘‘‘’、‘‘‘‘‘、‘‘‘、‘‘‘、‘‘‘‘、‘‘‘、‘‘‘’,‘‘,‘‘‘,‘‘‘,‘‘,‘(2010…然后当我查到这个时,它说它用于数据格式,那么数据的格式是否仍然有效?但是我在脚本中提取的版本是{'v':(2010,0,24,21,51,34)format@jbaldwin因此,该值本身(
(2010,0,24,21,51,34)
)看起来会导致错误,因为它没有括在引号中(由于基本JSON解码器不会将类似元组的表示转换为元组(我猜这可能是因为它不是有效的JavaScript,但我对JS不太熟悉,所以可能忽略这一点:)。您能控制收到的响应吗?