【发布时间】:2010-10-28 06:33:40
【问题描述】:
如何在 Python 中判断文件是否为二进制(非文本)文件?
我在 Python 中搜索大量文件,并不断在二进制文件中找到匹配项。这使得输出看起来非常混乱。
我知道我可以使用 grep -I,但我对数据的处理超出了 grep 所允许的范围。
在过去,我只会搜索大于0x7f 的字符,但utf8 之类的字符在现代系统上是不可能的。理想情况下,解决方案会很快。
【问题讨论】:
-
IF “过去我只搜索大于 0x7f 的字符” THEN 您曾经使用纯 ASCII 文本 THEN 仍然没有问题,因为编码为 UTF-8 的 ASCII 文本仍然是 ASCII(即没有字节 > 127)。
-
@ΤZΩΤZΙΟΥ:是的,但我碰巧知道我正在处理的一些文件是 utf8。我的意思是一般意义上的习惯,而不是这些文件的特定意义。 :)
-
只有概率。您可以检查:1)文件包含 \n 2)\n 之间的字节数相对较小(这不可靠)l 3)文件不包含值小于 ASCCI“空格”字符('' ) - 除了 "\n" "\r" "\t" 和零。
-
P.S.正如 Jorge 帖子的 cmets 线程中所提到的,这种策略会对包含例如 UTF-16 文本的文件产生误报。尽管如此,
git diff和 GNUdiff也使用相同的策略。我不确定它是否如此流行是因为它比替代方案更快、更容易,还是仅仅是因为 UTF-16 文件在倾向于安装这些实用程序的系统上相对稀有。