我有一个名为combine.gz的文件,我需要从s3上的子文件夹下载。我能够访问combine.gz文件(特别是每个目录一个),但我无法在boto中找到一个方法来读取.gz文件到我的本地机器。
我能找到的只有boto.utils.fetch_file
,key.get_contents_to_filename
,key.get_contents_to_file
方法,据我所知,所有方法都直接传输文件的内容。
有没有办法让我首先使用boto从.gz格式读取压缩文件到S3本地机器上,然后解压缩它?
非常感谢任何帮助。
答案 0 :(得分:3)
您可以将完整内容作为字符串读取,然后将其作为字符串对象进行管理。这非常危险,可能导致内存或缓冲区问题,所以要小心。
检查使用cStringIO.StringIO,gzip.GzipFile和boto
datastring = key.get_contents_as_string()
data = cStringIO.StringIO(datastring)
rawdata = gzip.GzipFile(fileobj=data).read()
再次 - 小心,因为在gzip文件格式错误的情况下,这会有很多内存和潜在的安全问题。如果你不控制双方,你会想要尝试包装,除了防守代码。