首页 > 解决方案 > 在 Linux 上使用 Python zipfile 提取时出现 OSError 无效参数

问题描述

我想将 .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文件的方法的任何信息或控制。

标签: pythonpython-3.xzipfile7zip

解决方案


Linux 仅将其识别'/'为路径分隔符,但您可以设置os.altsep = '\\'哪个应该起作用。


推荐阅读