如何使用writelines gzip文件?



我的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)

相关内容

  • 没有找到相关文章