使用boto3在S3中动态提取7z文件

2024-05-29 02:29:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我在s3 bucket中有一个非常大的7z文件,比如说s3://tempbucket1/Test_For7zip.7z,它可以运行几十GB。我不想下载它,解压缩它,然后重新上传回s3。我想使用Boto3动态解压它并将其保存到S3中

我尝试使用lzma包解决这个问题,该包基于之前的SO answer,它使用^{中的fileobj选项处理*.zip文件的动态解压缩

from io import BytesIO
import gzip
import lzma
import boto3

# setup constants
bucket = 'tempbucket1'
gzipped_key = 'Test_For7zip.7z'
uncompressed_key = 'Test_Unzip7zip'

# initialize s3 client, this is dependent upon your aws config being done 
s3 = boto3.client('s3', use_ssl=False)  
s3.upload_fileobj(                      # upload a new obj to s3
    Fileobj=lzma.LZMAFile(              
                BytesIO(s3.get_object(Bucket=bucket,
                                      Key=gzipped_key)['Body'].read()),   
                'rb'),                  # read binary
    Bucket=bucket,                      # target bucket, writing to
    Key=uncompressed_key)               # target key, writing to

但是,这会导致以下错误

LZMAError: Input format not supported by decoder

是否有一个python包可以基于BytesIO解码7z文件,或者有更好的方法实现这一点


Tags: 文件tokeytestimports3bucket动态

热门问题