我在使用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()
以下是异常信息:
zipfile.BadZipfile: 目录中的文件名"env\index"与头部中的"env/index"不一致。
更新:我用临时文件(tempfile.mkstemp("temp.zip")
)替换了字符串缓存cStringIO.StringIO()
,现在它可以工作了。当zipfile模块写入缓存时会发生某些事情导致归档文件损坏,但我不确定问题出在哪里。
问题是我读取/写入的文件以"r"/"w"模式打开而不是"rb"/"wb"模式。在Linux中这不是问题,但由于字符编码问题,在Windows中它给我带来错误。现已解决。
zf.write(os.path.join(dirname, filename))
会发生什么? - Velociraptorswrite
函数第二个参数,它会在存档中构建整个目录结构,而这并不是我需要的。例如,它会生成useless\\directory\\structure\\up\\to\\relevant\\directory
而不是relevant\\directory
。我认为这个问题与cStringIO.StringIO()
有关。 - Cat