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

Posted

技术标签:

【中文标题】如何在 Python 中将文件写入 Zip 文件的根目录【英文标题】:How to Write a File to the Root Directory of a Zip File in Python 【发布时间】: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!我原以为这会给我一个与文件同名的文件夹。谁能解释为什么会这样? 【参考方案1】:

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

来自python docs

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

你想要的

archive.write(fileName, fileNameWithoutPath)

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

【讨论】:

+1 我在智能感知中看到了这一点,但错误地认为 arcname 指的是您正在创建的 zip 文件。应该阅读说明!

以上是关于如何在 Python 中将文件写入 Zip 文件的根目录的主要内容,如果未能解决你的问题,请参考以下文章

在python中将文本写入zipfile

在 Python 中将 zip 列表保存到 csv

如何从 zip 中提取 csv 文件并在 python 中将其保存到磁盘? [复制]

Python,在内存中写入 zip 到文件

如何通过在 Python 中将两个列表合并为一个,使用 CSV 模块或 Pandas 写入 csv 或 Excel 文件?

在 terraform 中将 2 个 python 文件添加到 lambda_zip [重复]