[英]Python:Retrieve chunk of a zip file and process
我需要解壓縮大型 zip 文件(大約大小 ~10 GB)並將其放回 S3。 我的 memory 限制為 512 MB。
我嘗試了這段代碼並在line: 9
得到了一個MemoryError
,它將整個文件內容加載到 memory 中,因此出現了這個 memory 錯誤。 如何檢索 zip 文件的一塊,解壓縮並將其上傳回 S3?
import json
import boto3
import io
import zipfile
def lambda_handler(event, context):
s3_resource = boto3.resource('s3')
zip_obj = s3_resource.Object(bucket_name="bucket.name", key="test/big.zip")
buffer = io.BytesIO(zip_obj.get()["Body"].read())
z = zipfile.ZipFile(buffer)
for filename in z.namelist():
s3_resource.meta.client.upload_fileobj(
z.open(filename),
Bucket="bucket.name",
Key=f'{"test/" + filename}'
)
請告訴我
我建議使用 Lambda function 在運行實例api 的 UserData 中使用預定義腳本啟動 EC2 實例,以便您可以在腳本中指定位置文件名等。 在腳本中,您可以從 S3 下載 zip 並使用 linux 命令解壓縮,然后遞歸地將整個文件夾上傳到 S3。
您可以根據 zip 文件大小選擇 RAM/ROM,發布后您可以通過相同的腳本停止實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.