У меня есть zip-файл, который был создан на Windows
машине с помощью этого инструмента System.IO.Compression.ZipFile
(этот zip-архив содержит множество файлов и папок). У меня есть код Python, который работает на Linux
машине (точнее, raspberry pi), который должен распаковать архив и создать все необходимые папки и файлы. Я использую библиотеки Python 3.5.0
и zipfile
, это пример кода:
import zipfile
zip = zipfile.ZipFile("MyArchive.zip","r")
zip.extractall()
zip.close()
Теперь, когда я запускаю этот код, вместо того, чтобы получить красивое распакованное дерево каталогов, я получаю все файлы в корневом каталоге со странными именами, например Folder1\Folder2\MyFile.txt
.
Я предполагаю, что, поскольку zip-архив был создан в Windows, а разделитель каталогов в Windows - \
, тогда как в Linux это /
, библиотека python zipfile
рассматривает \
как часть имени файла, а не разделителя каталогов. Также обратите внимание, что когда я извлекаю этот архив вручную (не через код Python), все папки создаются должным образом, поэтому кажется, что это определенно проблема библиотеки zipfile
. Еще одно замечание: для zip-архивов, созданных с помощью другого инструмента (не System.IO.Compression.ZipFile
), он работает нормально, используя тот же код Python.
Есть какие-нибудь сведения о том, что происходит и как это исправить?
sudo unzip MyArchive.zip
, и это прекрасно работает. - person Mykhailo Seniutovych   schedule 30.08.2018from os import path; path.altsep = '\\'
где угодно, прежде чем позвонитьextractall
. - person Mad Physicist   schedule 30.08.2018os.path.altsep
для замены. - person blhsing   schedule 30.08.2018