我需要使用请求调用来下载一个 tar gz 文件,我发现 requests.get 会自动解压缩该文件,我尝试使用给定的解决方案 here但是当我尝试使用 tar 解压缩它时,它说它不是 gzip 格式。
我尝试了以下方法:
response = requests.get(url,auth=(user, key),stream=True)
if response.status_code == 200:
with open(target_path, 'wb') as f:
f.write(response.raw)
if response.status_code == 200:
with open(target_path, 'wb') as f:
f.write(response.raw)
raw = response.raw
with open(target_path, 'wb') as out_file:
while True:
chunk = raw.read(1024, decode_content=True)
if not chunk:
break
out_file.write(chunk)
解压时出现上述所有错误:
$ tar -xvzf /tmp/file.tar.gz -C /
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
注意:不能使用urllib.open因为我需要身份验证等,所以我必须使用请求库
最佳答案
你只需要把f.write(response.raw)
改成f.write(response.raw.read())
试试下面的代码,这应该会给你一个正确的 tar gz 文件。
import requests
url = 'https://pypi.python.org/packages/source/x/xlrd/xlrd-0.9.4.tar.gz'
target_path = 'xlrd-0.9.4.tar.gz'
response = requests.get(url, stream=True)
if response.status_code == 200:
with open(target_path, 'wb') as f:
f.write(response.raw.read())
关于python - 使用 python Requests 下载一个压缩的 tar.gz 文件并使用 tar 解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54289735/