AWS S3 -仅Zip文件对象,而不是路径



我在AWS lambda中有以下代码来压缩S3文件

import zipfile
import boto3
from io import BytesIO
def lambda_handler(event, context):
in_bucket = 'in_bucket'
in_key = 'test/run_id=123/'
out_bucket = 'out_bucket'
out_key = 'test/zip_output/model.zip'

createZipFileStream(in_bucket, in_key, out_bucket, out_key)
def create_zip(in_bucket, in_key, out_bucket, out_key):
s3 = boto3.resource('s3')
bucket = s3.Bucket(in_bucket)
files_collection = bucket.objects.filter(Prefix=in_key).all()

archive = BytesIO()
with zipfile.ZipFile(archive, 'w', zipfile.ZIP_DEFLATED) as zip_archive:
for f in files_collection:
with zip_archive.open(f.key, 'w') as file1:
file1.write(f.get()['Body'].read())  
archive.seek(0)
s3.Object(out_bucket, out_key).upload_fileobj(archive)
archive.close()

以上代码虽然工作成功,但zip包含整个S3路径。我想只有文件对象在压缩,而不是路径位置。例如,如果输入路径s3://bucket/key/file.csv的zip文件夹密钥,然后文件.csv,我正在寻找一个解决方案,只有文件对象。

谢谢

似乎这一行:

with zip_archive.open(f.key, 'w') as file1:

告诉Zip文件名

因此,你可以这样修改它:

with zip_archive.open(f.key.split('/')[-1], 'w') as file1:

将只给它最后一个斜杠之后的字符.

最新更新