使用 python 请求下载压缩的 tar.gzfile 并使用 tar 解压缩
Use python Requests to download an compressed tar.gzfile and unzip it using tar
我需要使用请求调用来下载一个 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())
我需要使用请求调用来下载一个 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())