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 = '\'
这应该有效。
我想将 .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 = '\'
这应该有效。