![]() |
1
36
您也可以使用 mimetypes 模块:
编译二进制mime类型的列表相当容易。例如,Apache使用mime.types文件分发,您可以将其解析为一组列表(二进制和文本),然后检查mime是否在您的文本或二进制列表中。 |
![]() |
2
51
还有另一种方法 based on file(1) behavior :
例子:
|
![]() |
3
11
试试这个:
|
![]() |
4
8
如果有帮助,许多二进制类型都以一个幻数开始。 Here is a list 文件签名。 |
![]() |
5
6
如果将python3与utf-8一起使用,它是直接向前的,只需在文本模式下打开文件,如果收到
例子:
|
![]() |
6
5
下面是一个使用Unix的建议 file 命令:
示例用法: >>> istext('/etc/motd') True >>> istext('/vmlinuz') False >>> open('/tmp/japanese').read() '\xe3\x81\x93\xe3\x82\x8c\xe3\x81\xaf\xe3\x80\x81\xe3\x81\xbf\xe3\x81\x9a\xe3\x81\x8c\xe3\x82\x81\xe5\xba\xa7\xe3\x81\xae\xe6\x99\x82\xe4\xbb\xa3\xe3\x81\xae\xe5\xb9\x95\xe9\x96\x8b\xe3\x81\x91\xe3\x80\x82\n' >>> istext('/tmp/japanese') # works on UTF-8 True
它有不可移植到Windows的缺点(除非您有类似的
|
![]() |
7
5
使用 binaryornot 图书馆(图书馆) GitHub ) 它非常简单,基于在这个stackoverflow问题中找到的代码。 实际上,您可以用两行代码编写这个代码,但是这个包可以避免您必须使用各种奇怪的文件类型(跨平台)编写和彻底测试这两行代码。 |
![]() |
8
4
通常你得猜。 如果文件中有扩展名,您可以将它们作为一条线索来查看。 您还可以识别已知的二进制格式,并忽略这些格式。 否则,请查看您拥有的不可打印的ASCII字节的比例,并从中进行猜测。 您还可以尝试从UTF-8解码,看看这是否会产生合理的输出。 |
![]() |
9
3
如果您不在Windows上,可以使用 Python Magic 确定文件类型。然后您可以检查它是否是文本/mime类型。 |
![]() |
10
3
较短的解决方案,带有UTF-16警告:
|
![]() |
11
2
我们可以使用python本身来检查文件是否是二进制的,因为如果我们尝试以文本模式打开二进制文件,它就会失败。
|
![]() |
12
1
我来这里寻找完全相同的东西——标准库提供的一个全面的解决方案,用于检测二进制或文本。在回顾了人们提出的选择之后,尼克斯 文件 命令看起来是最好的选择(我只为LinuxBoxen开发)。其他一些发布的解决方案使用 文件 但在我看来,它们不必要地复杂,所以我想说的是:
它应该不用说,但是调用此函数的代码应该确保您可以在测试之前读取文件,否则将错误地将文件检测为二进制文件。 |
![]() |
13
1
我想最好的解决办法是使用猜测类型函数。它包含一个包含多个mimetype的列表,您还可以包含自己的类型。 下面是我为解决我的问题所做的脚本:
它在类内部,正如您可以根据代码的结构看到的那样。但是,您可以在应用程序中修改您想要实现它的内容。 使用起来很简单。 方法gettextfiles返回一个列表对象,其中包含您传入的路径变量目录中的所有文本文件。 |
![]() |
14
1
下面是一个函数,它首先检查文件是否以BOM开头,如果不是,则查找初始8192字节内的零字节:
从技术上讲,检查UTF-8BOM是不必要的,因为它不应该包含所有实际用途的零字节。但是,由于这是一种非常常见的编码,因此在开始时检查BOM比扫描所有8192字节中的0要快。 |
![]() |
15
0
你在Unix吗?如果是,请尝试:
shell返回值是颠倒的(0是可以的,所以如果它找到“text”,那么它将返回0,在python中,这是一个错误的表达式)。 |
![]() |
16
0
更简单的方法是检查文件是否包含空字符(
请参见下面的完整示例:
样品使用情况:
|
![]() |
17
0
关于NIX:
如果您可以访问
|
![]() |
18
0
如果文件中包含 NULL character .
这是Perl的版本
来源: Perl's "guess if file is text or binary" implemented in Python |