如何在Python中将文件写入Zip文件的根目录

时间:2013-11-05 23:11:21

标签: python python-2.7 zipfile

我正在尝试使用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资源管理器中?

1 个答案:

答案 0 :(得分:2)

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

来自python docs

  

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

所以你想要

archive.write(fileName, fileNameWithoutPath)

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