Распаковка многослойного почтового индекса с помощью Python - PullRequest
0 голосов
/ 12 февраля 2019

Я ищу способ использовать Python для извлечения многокомпонентных zip-файлов (например, blah.zip, blah.z01, blah.z02, blah.z03 и т. Д.) В Windows без каких-либо обязательных установок (например, 7zip).Этот вопрос уже задавался, но единственный ответ там говорит об использовании локальной установки 7zip, которую я бы предпочел избежать, и у меня недостаточно репутации, чтобы добавить комментарий к этой теме.

Яразработка отдельного настольного приложения для Windows с использованием Python для основной функциональности, и важной частью одной из его основных функций является возможность извлечения данных zip-файлов, переданных ему.В настоящее время я делаю это с помощью портативного 7zip (7za), распространяемого вместе с инструментом, но из-за новой ситуации мне нужно также поддерживать многокомпонентные zip-файлы, и я не могу этого сделать.

Myтекущий код просто

subprocess.call('7za x -o"'+destinationPath+'" "'+zipPath+'"')

, который работает для обычных почтовых индексов, но для многочастных почтовых индексов ничего не происходит, и, запустив его вручную через cmd, я получаю вывод

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
Processing archive: zipname.zip
Error: Can not open file as archive

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

Я также пытался использовать библиотеку Python Zipfile, но это дает мне

error: "BadZipFile: Bad magic number for file header"

как отмечено в другой ветке.

Большое спасибо заранее!

1 Ответ

0 голосов
/ 12 февраля 2019

Это больше похоже на проблему с bash, чем на проблему с питоном, учитывая, что вы используете subprocess.call().Возможно, вы захотите cat частей вместе, чем распаковать, например, так:

cat test.zip.* >test.zip
unzip test.zip

За исключением нескольких subprocess.call() с.

См. Здесь: https://unix.stackexchange.com/questions/40480/how-to-unzip-a-multipart-spanned-zip-on-linux

...