我正在尝试使用boto从S3流式传输一个.gz文件,并迭代未压缩的文本文件的行。神秘的是,循环永远不会终止;当整个文件被读取时,迭代会重新开始从文件开头。假设我创建并上传如下的输入文件:
结果如下:
为什么会发生这种情况?我认为我肯定漏掉了某些非常基础的东西。
> echo '{"key": "value"}' > foo.json
> gzip -9 foo.json
> aws s3 cp foo.json.gz s3://my-bucket/my-location/
我运行以下Python脚本:
import boto
import gzip
connection = boto.connect_s3()
bucket = connection.get_bucket('my-bucket')
key = bucket.get_key('my-location/foo.json.gz')
gz_file = gzip.GzipFile(fileobj=key, mode='rb')
for line in gz_file:
print(line)
结果如下:
b'{"key": "value"}\n'
b'{"key": "value"}\n'
b'{"key": "value"}\n'
...forever...
为什么会发生这种情况?我认为我肯定漏掉了某些非常基础的东西。
close
函数。它只是将close
委托给self.key.close()
。 - killthrushboto3
,以10 MiB块读取zip文件吗? - user 923227