【发布时间】:2019-02-05 00:47:36
【问题描述】:
我有一个使用此工具System.IO.Compression.ZipFile 在Windows 机器上创建的 zip 文件(此 zip 存档包含许多文件和文件夹)。我有一个在 Linux 机器(确切地说是树莓派)上运行的 python 代码,它必须解压缩存档并创建所有必要的文件夹和文件。我正在使用Python 3.5.0 和zipfile 库,这是一个示例代码:
import zipfile
zip = zipfile.ZipFile("MyArchive.zip","r")
zip.extractall()
zip.close()
现在,当我运行这段代码而不是得到一个很好的解压缩目录树时,我得到了根目录中的所有文件,它们的名字很奇怪,比如Folder1\Folder2\MyFile.txt。
我的假设是,由于 zip 存档是在 Windows 上创建的,并且 Windows 上的目录分隔符是 \ 而在 Linux 上是 /,python zipfile 库将 \ 视为文件名而不是目录的一部分分隔器。另请注意,当我手动(而不是通过 python 代码)提取此存档时,所有文件夹都按预期创建,因此看来这绝对是zipfile 库的问题。另一个注意事项是,对于使用不同工具(不是System.IO.Compression.ZipFile)创建的 zip 档案,使用相同的 python 代码可以正常工作。
关于发生了什么以及如何解决它的任何见解?
【问题讨论】:
-
Zip 文件将所有内容存储在根目录中。层次结构实际上是通过文件名中的斜线创建的。
-
显示如何手动提取存档
-
@MadPhysicist 这是所有的 Python 代码。或者你问的是什么代码?
-
@MadPhysicist 非常简单
sudo unzip MyArchive.zip这工作正常。 -
在拨打
extractall之前,请在任何地方尝试:from os import path; path.altsep = '\\'。
标签: python linux python-3.x archive zipfile