在本地创建zipfile并从s3写入文件

时间:2019-02-20 17:16:59

标签: python zip zipfile

我正在本地计算机上创建一个zipfile,并想从s3中写入文件。到目前为止,我无法做到。这是我的平均时间。

import os
import zipfile
from fs import open_fs

fs = open_fs(os.getenv('s3_sample_folder'))
file_names = file_names() #list of file names

with zipfile.ZipFile('zipfile.zip', mode='w') as zf:
   for file in file_names:
       with fs.open('/'+file, 'rb') as remote_file:
           content = remote_file.read()
           zf.write(content, basename(content))

2 个答案:

答案 0 :(得分:2)

ZipFile.write方法接受文件名,而不接受文件内容。您应该使用ZipFile.writestr方法将文件内容写入zip文件:

zf.writestr(file, content)

答案 1 :(得分:0)

由于使用的是PyFilesystem,因此可以打开S3文件系统和Zip文件系统,然后使用copy_file在它们之间进行复制。

类似以下的方法应该起作用:

import os
from fs import open_fs
from fs.copy import copy_file

with open_fs(os.getenv('s3_sample_folder')) as s3_fs:
    with open_fs('zip://zipfile.zip', create=True) as zip_fs:
        for filename in file_names():
            copy_file(s3_fs, filename, zip_fs, filename)