gpt4 book ai didi

python - 无法解压缩使用 zipfile (Python) 构建的存档

转载 作者:太空狗 更新时间:2023-10-30 02:00:14 24 4
gpt4 key购买 nike

我在使用 Python 中的 zipfile 构建的存档时遇到问题。我遍历目录中的所有文件并将它们写入存档。之后当我尝试提取它们时,出现与路径分隔符相关的异常。

the_path= "C:\\path\\to\\folder"
zipped= cStringIO.StringIO()
zf = zipfile.ZipFile(zipped_cache, "w", zipfile.ZIP_DEFLATED)
for dirname, subdirs, files in os.walk(the_path) :
for filename in files:
zf.write(os.path.join(dirname, filename), os.path.join(dirname[1+len(the_path):], filename))
zf.extractall("C:\\destination\\path")
zf.close()
zipped_cache.close()

异常(exception)情况:

zipfile.BadZipfile: File name in directory "env\index" and header "env/index" differ.

更新:我用临时文件 (tempfile.mkstemp("temp.zip")) 替换了字符串缓冲区 cStringIO.StringIO(),现在有用。当 zipfile 模块写入损坏存档的缓冲区时会发生一些事情,但不确定问题是什么。

问题是我正在从以“r”/​​“w”而不是“rb”/“wb”模式打开的文件中读取/写入信息。这在 Linux 中不是问题,但由于字符编码,它在 Windows 中给了我错误。已解决。

最佳答案

您应该考虑在字符串前添加一个 r 以表明它是原始字符串——路径中的反斜杠被解释为转义字符。

以下代码:

#!/bin/env python    
print(r"C:\destination\path")
print(r"C:\path\to\folder")
print("C:\destination\path")
print("C:\path\to\folder")

产生以下输出:

C:\destination\path
C:\path\to\folder
C:\destination\path
C:\path o
older

请注意,\t 和\f 在最后一行被解释为 tabformfeed

有趣的是,您还可以将反斜杠更改为正斜杠(即 open("C:/path/to/folder"),这会起作用。

或者,使用 ... 反斜杠转义反斜杠(即 open("C:\\path\\to\\folder"))。

IMO,最清晰和最简单的解决方案是简单地添加一个 r


编辑:看起来您需要使用第二种解决方案,即正斜杠。 zipfile 库显然有点严格——考虑到这是一个仅限窗口的错误,它可能会偷偷通过。 (参见 Issue 6839)。

关于python - 无法解压缩使用 zipfile (Python) 构建的存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6063910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com