使用 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 字节的主要内容,如果未能解决你的问题,请参考以下文章