Я хочу извлечь файл из архива .zip в другой каталог. Сначала я создаю ZipFile
объект
zfile = '/home/.../filename.zip'
archive = zipfile.ZipFile(zfile, 'r')
Тройная точка ...
- это я просто скрываю полный путь, а не реальный путь.
Затем я извлекаю определенный член из архива в другой каталог
print(archive.namelist()[0])
# returns sub\\xxx.data where the two back slashes is not a typo!
path = '/home/.../datadir'
archive.extract(member='sub\\xxx.data', path=path)
Тогда я получаю системную ошибку
OSError: [Errno 22] Invalid argument: '/home/.../datadir/sub\\xxx.data'
Если я вручную заменю две косые черты \\
на одну прямую sla sh /
тогда я получаю другую ошибку
archive.extract(member='sub/xxx.data', path=path)
KeyError: "There is no item named 'sub/xxx.data' in the archive"
Таким образом, система Linux не распознает путь с двумя обратными косыми чертами как допустимый путь Linux, и путь не может быть изменен вручную, потому что тогда файл в архиве .zip вообще не распознается.
У меня возникает та же проблема при использовании 7-Zip
К сожалению, у меня нет никакой информации или контроля относительно метода, используемого для создания файла .zip
в первое место.