![](/img/trans.png)
[英]Use AWS lambda function to convert S3 file from zip to gzip using boto3 python
[英]Reading contents of a gzip file from a AWS S3 using Boto3
下面是我用来读取 gz 文件的代码
import json
import boto3
from io import BytesIO
import gzip
def lambda_handler(event, context):
try:
s3 = boto3.resource('s3')
key='test.gz'
obj = s3.Object('athenaamit',key)
n = obj.get()['Body'].read()
#print(n)
gzip = BytesIO(n)
gzipfile = gzip.GzipFile(fileobj=gzip)
content = gzipfile.read()
print(content)
return 'dddd'
除了 Exception as e: print(e) raise e 但我得到以下错误
"errorMessage": "'_io.BytesIO' object has no attribute 'GzipFile'",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 20, in lambda_handler\n raise e\n",
" File \"/var/task/lambda_function.py\", line 14, in lambda_handler\n gzipfile = gzip.GzipFile(fileobj=gzip)\n"
蟒蛇版本-3.7
但它也不适合我,请建议我如何阅读文件内容
把它整理成一个正确的答案。 工作代码将是:
s3 = boto3.resource('s3')
obj = s3.Object('my-bucket-name','path/to/file.gz')
buf = io.BytesIO(obj.get()["Body"].read()) # reads whole gz file into memory
for line in gzip.GzipFile(fileobj=buf):
# do something with line
我有点担心内存占用,但似乎只有 gz 文件保存在内存中(上面的第 3 行)。 然后只有在for line
循环中解压缩形式的每一for line
。
对于38M
的 gz 文件,我的内存占用为47M
(在虚拟内存中,在 htop 中为VIRT
)。 解压后的文件大小为308M
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.