从s3桶读取gzip文件



嘿,我正试图从s3桶中读取gzip文件,这是我的尝试:

s3client = boto3.client(
's3',
region_name='us-east-1'
)
bucketname = 'wind-obj'
file_to_read = '20190101_0000.gz'
fileobj = s3client.get_object(
Bucket=bucketname,
Key=file_to_read
)
filedata = fileobj['Body'].read()

现在打开gzip文件,我这样做:

gzip.open(filedata,'rb')

但是它抛出错误:

ValueError: embedded null byte

所以我先试着解码它:

contents = filedata.decode('utf-8')

抛出另一个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

我已经尝试使用ISO-8859-1解码,然后它得到解码,但再次打开gzip文件时,它给出了相同的错误。

或者是否有其他方法可以使用,我可以从S3拉数据,如使用URL或其他东西?

gzip.open需要一个文件名或一个已经打开的文件对象,但是您直接将下载的数据传递给它。试着用gzip.decompress代替:

filedata = fileobj['Body'].read()
uncompressed = gzip.decompress(filedata)

最新更新