OSError 在 Linux 上使用 Python zipfile 提取时参数无效

OSError Invalid argument when extracting with Python zipfile on Linux

我想将 .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'

如果我手动将两个反斜杠 \ 更改为一个正斜杠 / 那么我会得到一个不同的错误

  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 文件的方法的信息或控制权。

Linux 仅将 '/' 识别为路径分隔符,但您可以设置 os.altsep = '\' 这应该有效。