python - 在 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
文件的方法的任何信息或控制。
解决方案
Linux 仅将其识别'/'
为路径分隔符,但您可以设置os.altsep = '\\'
哪个应该起作用。
推荐阅读
- javascript - 为什么在逗号运算符中抛出异常不会停止对其他操作数的评估?
- azure - 使用 Terraform 在 Azure 中分配角色
- sql - 如何计算连续值并在计数 3 后根据需要更改状态
- javascript - 连续的 Material-UI Snackbars(使用 React-Redux)
- php - 如何在laravel中对特定列进行分页?
- javascript - WebSocket - 失败:WebSocket 握手期间出错:缺少“连接”标头
- reporting-services - SSRS 图表数据集分组过滤器值
- uwp - 尝试在 uwp 中下载更新时出错
- python-3.x - python 请求 - 登录并存储 cookie 以供以后使用
- javascript - 如何在状态更改期间禁用事件