zipfile 将最后几行从我的文件中删除 - 为啥?

Posted

技术标签:

【中文标题】zipfile 将最后几行从我的文件中删除 - 为啥?【英文标题】:zipfile is leaving the last few lines off my file - why?zipfile 将最后几行从我的文件中删除 - 为什么? 【发布时间】:2014-09-12 03:38:39 【问题描述】:

所以我在 Python 中使用 zipfile 模块时遇到了问题。目前,当我尝试压缩 KML 文件以创建新的 KMZ 文件时,我遗漏了最后几行。 KML 有多长似乎并不重要。我认为这是因为 zipfile 没有写入最后一个压缩块。

kmz = zipfile.ZipFile(kmzPath , 'w')
kmz.write(kmlPath, 'CORS.kml', zipfile.ZIP_DEFLATED)

是的,在你问我已经导入 zlib 来进行压缩之前。我也尝试在较低级别使用 zlib,但有同样的问题。我被困住了。

有什么想法吗?

【问题讨论】:

【参考方案1】:

确保你打过电话

kmz.close()

.write(...) 命令之后,否则文件的全部内容将不会刷新到磁盘。为确保自动发生这种情况,请始终使用with 上下文管理器,因为退出循环时文件将关闭:

with zipfile.ZipFile(kmzPath, 'w') as kmz:
    kmz.write(kmlPath, 'CORS.kml', zipfile.ZIP_DEFLATED)

【讨论】:

嘿,好吧。那行得通。我通常也使用 with 但得到一个 AttributeError: ZipFile instance has no attribute 'exit' 所以这就是它被遗漏的原因。因为我几乎从不使用 *.close() 我忘了。臭虫。谢谢!【参考方案2】:

这只是一个猜测,但根据zipfile 文档:

您必须在退出程序之前致电close(),否则将不会写入基本记录。

你没有表明你实际上是在打电话给kmz.close()——这可能是问题所在吗?

【讨论】:

以上是关于zipfile 将最后几行从我的文件中删除 - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ZipFile 模块从 zipfile 中删除文件

Python 中怎样删除zip压缩文件夹中某个文件

使用 python zipfile 将文件添加到 jar

DotNetZip:将ZipFile转换为字节[]数组

sed 删除最后几行 和删除指定行 awk使用

如何从我的包用户的导入语句中删除输出文件夹?