OSError Неверный аргумент при извлечении с Python zipfile на Linux - PullRequest
1 голос
/ 21 января 2020

Я хочу извлечь файл из архива .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 в первое место.

1 Ответ

2 голосов
/ 21 января 2020

Linux распознает только '/' в качестве разделителя пути, но вы можете установить os.altsep = '\\', который должен работать.

...