python - 在包含换行符的文件上使用 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 或二进制文件的基础知识,因此任何有助于我重回正轨的信息将不胜感激。
解决方案
它与 Python 的 gzip 无关。可以说,这是 macOS 中的一个错误,它有时会通过存档实用程序将生成的未压缩数据检测为 mtree,但随后发现未压缩数据违反了 mtree 格式。
解决方法是不双击解压。使用 gzip 解压。
推荐阅读
- reactjs - 如何在反应 ts 中将布尔值传递给 Material UI MenuItem 值?
- rxjs - RXJS 递归展开一棵树
- c# - 如何在 Jquery MVC 中将文件路径绑定到文件上传
- python - 如何在 Django 的一个视图中提交和检索数据?
- angular - Angular - 生成动态填空和多项选择练习/问题
- java - Checkers App 无法使用 ontouch 和 ondraw 移动棋子
- python - Pandas .str.isnumeric() 用于浮点数?
- android - SQLite db 无法识别 ContentValue android studio 的值
- perl - 如何使用 Perl 修改位于特定行之后的一行?
- kdb - 如何在 KDB+ Q 中按小时分组?