【问题标题】:How to save a file after getting it in a request using http.client使用 http.client 在请求中获取文件后如何保存文件
【发布时间】:2017-04-19 13:43:55
【问题描述】:

我想这是一个愚蠢的问题,但我试图在谷歌上搜索答案,但没有运气。

所以我使用带有 http.client 包的 Get 请求连接到 API。

get 请求被发送到带有压缩文件的地址。发送请求没问题,我得到一个返回的对象。我接下来要做的就是将返回的文件保存到一个文件夹中。

我尝试查看 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")

然后能够在脚本中使用它。但我不知道如何处理返回的压缩文件。理想情况下,我希望在保存之前将其解压缩,但首先可以将其保存到文件中。

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

我确实对它进行了更多研究,当在返回的对象上使用 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)')]

我不确定这是否相关,但我想我现在需要一种下载附件的方法。

【问题讨论】:

    标签: python-3.x http.client


    【解决方案1】:

    您可以在 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

    【讨论】:

    • 你可以看到这一点,例如,在我的项目 PT-Tracking for iPhone/Pythonista 中,iPhone 获得了一个 sqlite 数据库的压缩子集,用于查看和/或进一步的离线处理:@ 987654322@
    • 好的,所以提取文件似乎应该没问题,但是您对如何从返回的对象中获取文件有任何提示吗?在您的示例代码中,您只需将 URL 传递给请求包。如何访问 filename=filename.csv.gz
    • 您可以在收到后直接从内存中提取,只要它不是一个巨大的文件并且它适合计算机RAM。但是打开以前保存的 zip 或 gzip 文件进行提取也非常简单。见:docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.open
    • 请注意,如果文件以 gzip 格式压缩,您应该选择 gzip 模块:docs.python.org/3.6/library/…
    • 嗨,@Siesta!如果此答案或任何答案解决了您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2012-03-30
    • 2023-04-05
    • 2012-03-30
    • 2012-10-13
    • 1970-01-01
    相关资源
    最近更新 更多