gpt4 book ai didi

python - 使用 Boto3 从 AWS S3 读取 gzip 文件的内容

转载 作者:行者123 更新时间:2023-12-02 00:26:45 24 4
gpt4 key购买 nike

下面是我用来读取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'

除了异常为e: 打印(e) 提高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"

python 版本-3.7

我也尝试实现以下建议 https://stackoverflow.com/questions/32794837/pass-io-bytesio-object-to-gzip- gzipfile-and-write-to-gzipfile

但它也不适合我,请建议我如何读取文件的内容

最佳答案

将其完成为正确答案。工作代码将是:

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 循环中解压缩形式的每一行。

对于 38M 的 gz 文件,我的内存占用量为 47M(在虚拟内存中,在 htop 中为 VIRT)。解压后的文件是308M

关于python - 使用 Boto3 从 AWS S3 读取 gzip 文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53557775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com