我的tmp文件夹中有几个文件,我想单独gzip并上传到S3。testList中包含/tmp/files/File1
这样的路径。我在gzip.open()中使用的文件名是/tmp/files/File1.gz
。我想对testList中的每个文件进行gzip。
for i in testList:
fileName = i.replace("/tmp/files/", "")
fileName2 = i + '.gz'
with open("path/to/file", 'rb') as orig_file:
with gzip.open(fileName2, 'wb') as zipped_file:
zipped_file.writelines(orig_file)
bucket.upload_fileobj(zipped_file, fileName, ExtraArgs={'ContentType': "application/gzip"})
当我从S3下载文件时,它们具有gz文件类型,但我无法在本地打开它们。它会抛出.gz文件为空且无法展开的错误。我认为我写内容的方式是不正确的。
我该如何解决这个问题?
编辑:
for i in testList:
fileName = i.replace("/tmp/files/", "")
fileName2 = i + '.gz'
with open(i, 'rb') as f_in:
with gzip.open(fileName2, 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
f_out.upload_fileobj(zipped_file, fileName, ExtraArgs={'ContentType': "application/gzip"})
即使这样,gzip文件仍然不可扩展。
您将在orig_file
中获得一个打开的文件,而不仅仅是行。
我认为你的用例是关于将现有文件转换为压缩文件。因此,以下应该是文档用法示例部分的相关段落:
如何GZIP压缩现有文件的示例:
import gzip import shutil with open('/home/joe/file.txt', 'rb') as f_in: with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)