如何检查文件是否包含纯文本?

7 投票
4 回答
9565 浏览
提问于 2025-04-15 20:34

我有一个文件夹,里面有很多文件,我想在这些文件里搜索某个字符串。问题是,有些文件可能是压缩包、可执行文件、音频文件等等。我能不能找到一种方法来检查这些文件是什么类型的,这样我就只打开并搜索文本文件、PHP文件等,而不去碰其他类型的文件呢?我不能仅仅依赖文件的后缀名。

4 个回答

2

试试这样做:

def is_binay_file(filepathname):
    textchars = bytearray([7,8,9,10,12,13,27]) + bytearray(range(0x20, 0x7f)) + bytearray(range(0x80, 0x100))
    is_binary_string = lambda bytes: bool(bytes.translate(None, textchars))

    if is_binary_string(open(filepathname, 'rb').read(1024)):
       return True
    else:
       return False

用这个方法像这样:

is_binay_file('<your file path name>')

如果文件是二进制类型,这个方法会返回True;如果是文本类型,则返回False。你可以很容易地根据自己的需要进行修改,比如可以创建一个叫做is_text_file的函数——这个就留给你自己去做了。

10

使用Python的 mimetypes 库:

import mimetypes
if mimetypes.guess_type('full path to document here')[0] == 'text/plain':
    # file is plaintext
6

你可以使用Python接口来调用libmagic,这样可以识别文件格式。

>>> import magic
>>> f = magic.Magic(mime=True)
>>> f.from_file('testdata/test.txt')
'text/plain'

想要更多示例,可以查看这个仓库

撰写回答