2017-04-19 101 views
1

我想这是一个愚蠢的问题,但我试图搜索谷歌上的答案和这里没有运气。如何在使用http.client请求获取文件后保存文件

所以我通过http.client包使用Get请求连接到API。

获取请求被发送到带有ziped文件的地址。发送请求可以,我得到一个返回的对象。接下来我要做的就是将返回的文件保存到一个文件夹中。

我试着在http.client文档中查找关于它的任何内容。

这是一个代码样子的例子。我不得不删除它的一些出于隐私的原因

conn = http.client.HTTPConnection("Adress to the server") 

headers = { 
    'cache-control': "no-cache", 
    } 

conn.request("GET", path_to_file + "?authTicket=" + ticket, 
headers=headers) 

res = conn.getresponse() 

return res 

代码运行正常,但我的问题是接下来要做的事。如果返回的数据只是一个普通的json文件,我只会这样做:

data = res.read() 
data = data.decode("uft-8") 

然后能够在脚本中使用它。但我不知道如何处理返回的ziped文件。我希望在保存之前将其解压缩,但作为开始,可以将其保存到文件中。

希望有人对此有一个简单的解决方案。

我确实看起来有点更加进去,并使用getheaders()返回的对象上,当我得到这个:

[('Date', 'Wed, 19 Apr 2017 13:48:41 GMT'), 
('Content-Type', 'application/octet-stream; charset=UTF-8'), 
('Content-Disposition', 'attachment;filename=filename.csv.gz'), 
('Content-Length', '2117014'), 
('Server', 'Jetty(9.2.17.v20160517)')] 

林不知道,如果是相关的,但我想我现在需要一种下载附件的方式。

回答

0

您可以在Python方便地提取一个zip文件:

import requests 
from zipfile import ZipFile 
import io 

my_request = requests.get(URL) 
ficheiro = ZipFile(io.BytesIO(my_request.content)) 

ficheiro.extract('file_name') 

您可以获取有关zipfile模块的详细信息和zipfile.ZipFile类在这里:

https://docs.python.org/3/library/zipfile.html

+0

您可以在行动中看到这,例如,在我的项目PT-Tracking for iPhone/Pythonista中,iPhone获取一个用于查看和/或进一步离线处理的sqlite数据库的压缩子集:https://github.com/victordomingos/PT-Tracking/tree /主/ ctt_tr acking_i电话 –

+0

好的,所以它似乎应该可以提取文件,但是你有关于如何从返回的对象获取文件的任何提示?在您的示例代码中,您只需将URL传递给请求包。如何访问文件名= filename.csv.gz – Siesta

+0

只要它不是一个巨大的文件,并且它适合计算机RAM,则可以在收到文件后直接从内存中提取文件。但打开先前保存的zip或gzip文件进行提取也很简单。请参阅:https://docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.open –