Создайте zipfile на локальном компьютере и запишите файлы из s3 - PullRequest
0 голосов
/ 20 февраля 2019

Я создаю zip-файл на своей локальной машине и хотел бы записать файлы из 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 голосов
/ 26 февраля 2019

Поскольку вы используете 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)
0 голосов
/ 20 февраля 2019

Метод ZipFile.write принимает имя файла, а не содержимое файла.Вместо этого вы должны использовать метод ZipFile.writestr для записи содержимого файла в zip-файл:

zf.writestr(file, content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...