我在s3 bucket中有一个非常大的7z文件,比如说s3://tempbucket1/Test_For7zip.7z
,它可以运行几十GB。我不想下载它,解压缩它,然后重新上传回s3。我想使用Boto3动态解压它并将其保存到S3中
我尝试使用lzma
包解决这个问题,该包基于之前的SO answer,它使用^{*.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文件,或者有更好的方法实现这一点
我从未尝试过这个,但谷歌给了我一个可能的解决方案。如果这能解决你的问题,请通过本帖联系
相关问题 更多 >
编程相关推荐