Python zipfile 模块创建多个同名文件

Posted

技术标签:

【中文标题】Python zipfile 模块创建多个同名文件【英文标题】:Python zipfile module creates multiple files with same name 【发布时间】:2014-03-03 10:14:32 【问题描述】:

我在 python 中有以下代码:

>>> import zipfile
>>> zip = zipfile.ZipFile('abc.zip', 'w')
>>> zip.writestr('myfile', 'This is sample text')
>>> zip.writestr('myfile', 'This is sample text')
>>> zip.close()

这将创建一个包含两个具有完全相同名称和路径的文件的存档。

这是为什么?

【问题讨论】:

你怎么能有两个文件,名称和路径完全相同? 当我尝试它时,看起来它也会在存档中创建两个具有相同名称和路径的文件。有在问题中正确重现它所需的所有代码,所以我不明白“缺乏足够的信息来诊断问题”关闭投票。 zip 格式允许多个文件同名。尽管我似乎找不到该功能的适当文档。如果有人找到链接,我想检查该信息。 这是归档格式的一个有点烦人的特性。例如,Tar 也允许这样做,文件名实际上不用于标识文件。这就是为什么在从 zip 存档中读取文件时不能依赖文件名,而应该传递 ZipInfo 以类似的方式,定义为“相同”的内容在某种程度上是特定于操作系统/文件系统的。例如。你可以让'file.json'和'File.json'最终在OS X上与不区分大小写的文件系统发生冲突。不要让我开始使用 Windows 上的“file.aux”之类的东西...... 【参考方案1】:

Zip 和其他一些存档格式(如 Tar)允许这样做,甚至可以通过 Python API 解决:

注意:open()read()extract() 方法可以采用文件名或 ZipInfo 对象。当您尝试读取包含重名成员的 ZIP 文件时,您会意识到这一点。

【讨论】:

以上是关于Python zipfile 模块创建多个同名文件的主要内容,如果未能解决你的问题,请参考以下文章

ZipFile 模块创建 .pyc 文件

Python 中的 ZipFile 模块 - 运行时问题

Python:如何创建一个 zipfile 并将其写入多个目录/文件夹?

python模块 zipfile

如何使用 Python 的 zipfile 模块对 ZIP 文件中的文件设置权限(属性)?

Zipfile库解压zip文件