Как извлечь zip-файлы из нескольких частей, используя скрипт python для запуска в облачной функции Google - PullRequest
1 голос
/ 15 апреля 2020

Добрый день,

Я очень плохо знаком с языком python, и мне поручили создать скрипт python, который будет получать все файлы вложений из электронных писем. Файлы вложений имели многодисковую часть (.zip, .z01, .z02, et c). Обычный zip-файл без какой-либо многодисковой части можно легко извлечь с помощью модуля zipfile. Этот код работает:

password = get_data()
    files = [f for f in os.listdir(source_file_name) if isfile(join(source_file_name, f))]
    for file in files:
        if file.endswith('.zip'):
            file_name_split = file.split("_")
            resource_name = file_name_split[0]
            pswd = password[resource_name]
            if resource_name not in listdir('extracted/'):
                zip_ref = zipfile.ZipFile('attachments/' +file)
                zip_ref.setpassword(pwd = bytes(pswd, 'utf-8'))
                zip_ref.extractall('extracted')
                zip_ref.close()
                os.unlink(source_file_name + file)  

Но я не могу использовать этот код в многодисковом файле, так как модуль zip-файла не поддерживает ZIP-файлы с добавленными комментариями или многодисковые ZIP-файлы, как сказано в документах. Модуль почтового файла. Я ищу в Google альтернативы и вхожу в приложение 7z, используя модуль подпроцесса python. Вот мой код на этом.

zip_exe = '"C:/Program Files/7-Zip/7z.exe"' + ' x ' '"' + tmp_folder + 'ACERES.zip' '"'
subprocess.Popen(zip_exe, shell = True, cwd = tmp_extracted_folder)

Это работает на моем локальном компьютере, используя мой рабочий стол Windows 10 без каких-либо проблем. Но мне было интересно, как я могу поставить этот скрипт в облачной функции Google? Я m not sure that this will work easily by just putting on this script. Do I need to install 7z application on cloud function? I м не уверен. Ребята, вы понимаете, сработает ли это? Мне нужна помощь, я застреваю в этом приложении.

Если есть другой способ обойти, пожалуйста, дайте мне знать. Заранее спасибо.

1 Ответ

0 голосов
/ 15 апреля 2020

Вы не можете установить программное обеспечение в облачных функциях, поскольку они не позволяют вам взаимодействовать на уровне сервера, поскольку это безсерверная платформа, которая выполняет только одноцелевые функции, запускаемые событиями.

Если вы решите go с подходом использования приложения 7zip вам придется создавать экземпляр сервера для вашего приложения с использованием вычислительного механизма, однако это приведет к затратам на сервер для вашего проекта, и я не думаю, что это лучшее решение для вашей проблемы.

То, что вы можете сделать, это использовать другие Python библиотеки, чем ZipFile, для программной разархивации, которая будет выполняться в облачной функции. Лично я бы предложил вам использовать pyunpack, так как это самая полная библиотека для разархивирования, которую я нашел для Python. Вы можете взглянуть на документацию по ней в этой ссылке с инструкциями по ее реализации и примерами, вы также можете попробовать libarchive и lmza (в зависимости от в вашей python версии).

ПРИМЕЧАНИЕ : для pyunpack вам также необходимо импортировать patool , который является «движком», который используется для распаковки файлов. иначе он будет полагаться только на ZipFile и не будет работать.

Надеюсь, это поможет.

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