【发布时间】:2013-11-05 23:11:21
【问题描述】:
我正在尝试用使用zipfile 的脚本替换压缩存档中的文件。文件是一个目录,存档在另一个目录。为此,我将原始存档中的所有内容复制到另一个存档中,不包括我要替换的文件。然后我将要替换的新版本文件写入新存档中,关闭它,然后删除旧存档并重命名新存档。应该很容易吧? 错误。
无论出于何种原因,zipfile.write() 方法都有一个愚蠢的做法,它假定第二个(可选)参数 arcname 与您的文件名相同,除非您指定它。所以,如果我有以下情况:
fileName = "C:\\Documents\\file"
archive.write(fileName)
我将获得一个包含名为“文档”的子存档的存档,其中包含文件。我希望文件位于存档的根目录中(旁注:“根目录”是我所指的正确术语吗?)
我尝试过的方法:
-
archive.write(fileName,'')这在存档中产生了一个奇怪的文件,无法打开。 -
archive.write(fileName, archive)我真的认为这会起作用,但系统真的不喜欢它。 -
archive.write(fileNameWithoutPath)这个返回了一个错误,因为 Python 找不到该文件了。
那么我如何指定我想将文件放在存档的根目录中并仍然指定它的路径以便 Python 可以找到它呢?
次要和半相关的问题:有没有办法创建新的存档,使其隐藏在 Windows 资源管理器中?
【问题讨论】:
-
嗨!您可能还想用
python标记它。您可能会得到更好的回应! -
您是否尝试使用 os.path.basename 修剪文件名并将其作为 arcname 传递?
-
根据您对 write 方法的描述,第二个参数是档案中的名称 archive.write(filename, fileNameWithoutPath) 做了什么
-
我不知道它为什么会起作用,但你的建议可以@Mark!我原以为这会给我一个与文件同名的文件夹。谁能解释为什么会这样?
标签: python python-2.7 zipfile