一个超轻量级的纯Python包,用于检查文件是二进制还是文本。
项目描述
一个超轻量级的纯Python包,使用类似于Perl的pp_fttext的启发式方法来判断文件是二进制还是文本。
自由软件:BSD许可证
状态
它工作正常,人们正在各个地方使用此包。但它还没有涵盖所有边缘情况。
代码可以进行改进。欢迎提交拉取请求!目前,它基于这些片段,但可能会发生变化
特性
对这些文件类型进行了测试
文本:.txt, .css, .json, .svg, .js, .lua, .pl, .rst
二进制:.png, .gif, .jpg, .tiff, .bmp, .DS_Store, .eot, .otf, .ttf, .woff, .rgb
对多种编码进行了测试。
为什么?
你可能想,“我能不能用两行代码就写出来?!”
实际上并不容易。这里有一篇关于Perl的猜测文件类型的启发式方法的精彩文章:[http://eli.thegreenplace.net/2011/10/19/perls-guess-if-file-is-text-or-binary-implemented-in-python/](http://eli.thegreenplace.net/2011/10/19/perls-guess-if-file-is-text-or-binary-implemented-in-python/)
这只是我们的起点。随着时间的推移,我们发现更多的边缘情况,我们的启发式方法变得更加复杂。
此外,这个包可以让你免于编写和彻底测试各种奇怪文件类型和编码的代码,跨平台。
构建
Linux (Ubuntu 12.04 LTS服务器版64位)
Windows (Windows Server 2012 R2 (x64))
致谢
特别感谢Eli Bendersky (@eliben)对其启发式方法和实现的解释,这为本项目提供了大量基础。
来自Perl的pp_fttext部分的源代码,用于检查文本性:[https://github.com/Perl/perl5/blob/v5.23.1/pp_sys.c#L3527-L3587](https://github.com/Perl/perl5/blob/v5.23.1/pp_sys.c#L3527-L3587)
历史
0.4.4 (2017-04-13)
通知用户文件I/O问题。感谢@lukehinds!
0.4.3 (2017-04-13)
由于[https://github.com/chardet/chardet/issues/113](https://github.com/chardet/chardet/issues/113),将chardet限制为3.0.2或更高版本。感谢@dan-blanchard快速修复!
0.4.2 (2017-04-12)
由于[https://github.com/chardet/chardet/issues/113](https://github.com/chardet/chardet/issues/113),将chardet限制为低于3.0。
添加了pyup徽章
添加了推送新版本的实用工具
0.4.0 (2015-08-21)
增强了对一些二进制流和UTF文本的检测。感谢
。 在Windows上设置Appveyor进行持续测试。感谢@pydanny。
更新到Perl源实现链接。感谢@asmeurer @pomredanne @audreyr。
在检查时处理UnicodeDecodeError。感谢@DRMacIver。
添加了基于Hypothesis的非常简单的测试。感谢@DRMacIver。
使用设置确定需求,并删除冗余的requirements.txt。感谢
。 在README.rst中添加了文档状态徽章。感谢
。 在travis.yml中运行tox。将pypy和Python 3.4添加到tox环境。感谢
@pydanny。 在检测编码时处理LookupError。感谢@DRMacIver。
0.3.0 (2014-05-05)
将测试和文档包含在源包中。感谢
。 删除不必要的shebangs和可执行位。感谢
。 仅生成一次可打印的扩展ASCII字节字符串。感谢
。 使读取的字节数可参数化。感谢
。
0.2.0 (2013-09-22)
对一切进行完整重写。感谢
。
0.1.1 (2013-08-17)
在Python 2.6、2.7、3.3、PyPy下通过测试。
0.1.0 (2013-08-17)
首次在PyPI发布。