使用 Python make_archiv 压缩后,MacOS PostScript Typ 1 字体为 0 字节

Posted

技术标签:

【中文标题】使用 Python make_archiv 压缩后,MacOS PostScript Typ 1 字体为 0 字节【英文标题】:MacOS PostScript Typ 1 fonts are 0 bytes after compressing with Python make_archiv 【发布时间】:2019-02-18 11:28:33 【问题描述】:

我有一堆旧的 Mac PostScript Typ 1 字体,我想将它们压缩到一个 zip 文件中。 压缩包含字体的文件夹后,我解压缩 zip 文件,其中的所有字体显示 0 字节并且不再可用。

压缩前它们看起来像这样:

像这样,压缩后:

我的代码:

shutil.make_archive(ordner, 'zip', ordner)

使用 nativ MacOS 归档程序压缩字体目录不会损坏字体。

更新:我尝试通过命令行(终端)使用原始 Unix-Tool 压缩我的文件。使用此代码:

zip -r -X compressed_directory.zip directory_to_be_compressed/

我得到了同样的错误结果。 所以我认为我遇到了一个位于 Mac OS 更深层次的问题。

更新:根据 benwiggy 的建议,我尝试了以下方法,但没有 -X 标志。结果相同:

 zip -r compressed_directory.zip directory_to_be_compressed/

【问题讨论】:

【参考方案1】:

旧的 Type 1 PostScript 字体使用 MacOS Resource fork 来存储它们的数据。文件系统的这一部分并不总是能被 Unix 工具很好地处理,除非它们被明确地编写来应对 Mac 资源分叉。

MacOs CLI 中捆绑的 zip 实用程序应默认包含资源分支(自 10.3 起)。 python util 可能无法访问 Mac 友好的实用程序。

您的 zip 命令使用 -X 标志,它故意排除扩展文件属性和其他可能包括资源分叉的东西。

【讨论】:

谢谢你,你的回答让我思考并做一些谷歌工作,并提出了这篇优秀的文章:blog.jay2k1.com/2010/02/03/… 我想我的资源叉有一些问题,不会包含在使用 unix 或 python 工具的 zip 文件。我必须做更多的搜索,如果我找到了解决方案,我会告诉你。【参考方案2】:

在对旧的 MacOS 资源叉进行进一步研究和大量测试之后,我发现如果不使用本机“存档实用程序”或其他一些工具,就无法将旧 MacOS Post Script Type 1 字体的资源叉包含到 .zip 文件中其他第三方工具,例如 Keka。 Python shutil.make_archiv() 命令不包括此类文件的资源分支,Unix 命令行工具 zip 也不包括。 我在 Xhalees 的博客上找到了一些关于这个主题的有用信息(非常好的和全面的解释):http://xahlee.info/UnixResource_dir/macosx.html

我想出的解决方案是在 Python 中使用 os module 调用 MacOS Terminal ditto 命令,然后让它工作。

import os
os.system("ditto -ck --rsrc --keepParent directory_to_zip zipped_file.zip")

【讨论】:

以上是关于使用 Python make_archiv 压缩后,MacOS PostScript Typ 1 字体为 0 字节的主要内容,如果未能解决你的问题,请参考以下文章

python怎样压缩和解压缩ZIP文件

Python使用Python压缩文件/文件夹

python 压缩和解压缩的浅学习

真香!Python 后台自动解压各种压缩文件

Python在后台自动解压各种压缩文件

怎么压缩用python写的游戏的文件大小?或者用啥开发库?