1

我正在尝试将压缩存档中的文件替换为使用zipfile. 文件是一个目录,存档在另一个目录。为此,我将原始存档中的所有内容复制到另一个存档中,不包括我要替换的文件。然后我将要替换的新版本文件写入新存档中,关闭它,然后删除旧存档并重命名新存档。应该很容易吧?错误的。

无论出于何种原因,该zipfile.write()方法都有一个愚蠢的事情,它假设第二个(可选)参数arcname与您的文件名相同,除非您指定它。所以,如果我有以下情况:

fileName = "C:\\Documents\\file"
archive.write(fileName)

我将获得一个带有名为“Documents”的子存档的存档,其中包含文件。我希望文件位于存档的根目录中(旁注:“根目录”是我所指的正确术语吗?)

我尝试过的事情:

  • archive.write(fileName,'') 这在存档中产生了一个奇怪的文件,无法打开。
  • archive.write(fileName, archive)我真的认为这会起作用,但系统真的不喜欢它。
  • archive.write(fileNameWithoutPath)这个返回了一个错误,因为 Python 无法再找到该文件。

那么如何指定我想将文件放在存档的根目录中并仍然指定它的路径以便 Python 可以找到它呢?

次要和半相关的问题:有没有办法创建新的存档,使其隐藏在 Windows 资源管理器中?

4

1 回答 1

3

我假设你想要一个名为 file 的 zipfile 中的条目,其中包含C:\Documents\file

来自python 文档

ZipFile.write(filename[, arcname[, compress_type]])
将名为 filename 的文件写入存档,给它存档名称 arcname

所以你要

archive.write(fileName, fileNameWithoutPath)

第一个参数是 zip 中的文件,第二个参数是要在存档中使用的名称,因为它不包含路径分隔符,因此不会创建任何目录。

于 2013-11-07T00:09:30.950 回答