首页 > 解决方案 > 在包含换行符的文件上使用 gzip 时出错

问题描述

我正在尝试使用 python 的gzip库来简化一些创建 csv 输出文件的 python 脚本。我尝试了许多不同的方法来创建 gzip 文件,但无论我尝试了哪种方法,我都遇到了同样的问题。

我的 python 脚本运行成功,但是当我尝试在 Finder 中解压 gzip 文件(使用 MacOS 10.15.6)时,系统提示我以下错误:

Unable to expand "file.csv.gz" into "Documents". (Error 79 - Inappropriate file type or format.)

经过一些调试,我已将错误原因缩小到包含换行符 ( \n) 字符的文件内容。

这个简单的示例代码在 gzip 扩展时触发了上述错误:

import gzip

content = b'Id,Food\n1,Spam\n2,Eggs\n'
f = gzip.open('file.csv.gz', 'wb')
f.write(content)
f.close()

当我从变量中删除所有\n字符时,一切正常:content

import gzip

content = b'Id,Food,1,Spam,2,Eggs'
f = gzip.open('file.csv.gz', 'wb')
f.write(content)
f.close()

gzip 是否希望我使用不同的换行机制?我确定我缺少一些关于 gzip 或二进制文件的基础知识,因此任何有助于我重回正轨的信息将不胜感激。

标签: pythonpython-3.xmacosgzip

解决方案


它与 Python 的 gzip 无关。可以说,这是 macOS 中的一个错误,它有时会通过存档实用程序将生成的未压缩数据检测为 mtree,但随后发现未压缩数据违反了 mtree 格式。

解决方法是不双击解压。使用 gzip 解压。


推荐阅读