+
17
-

python如何判断文件属于文本类型的?

python如何判断文件属于文本类型的?

即使把二进制文件的后缀换成txt,也能判断是否是文本类型文件?

网友回复

+
20
-

在 Python 中,可以通过检查文件内容来判断文件是否为文本类型,而不仅仅是依赖文件扩展名。以下是一些常用的方法:

1. 使用 chardet 库检测文件编码

chardet 是一个常用的库,可以检测文件的编码方式。如果文件是文本类型,通常可以检测到有效的编码。

import chardet

def is_text_file(file_path):
    with open(file_path, 'rb') as f:
        raw_data = f.read()
    result = chardet.detect(raw_data)
    # 如果检测到的编码置信度较高,则认为是文本文件
    return result['confidence'] > 0.7 and result['encoding'] is not None

# 示例
file_path = 'example.txt'
print(is_text_file(file_path))  # True 或 False
2. 尝试解码文件内容

通过尝试将文件内容解码为字符串,如果解码成功,则可能是文本文件。

def is_text_file(file_path):
    try:
        with open(file_path, 'rb') as f:
            raw_data = f.read()
        # 尝试用常见编码解码
        raw_data.decode('utf-8')
        return True
    except UnicodeDecodeError:
        return False

#...

点击查看剩余70%

+
5
-

3中方式:

使用 python-magic 检测文件类型
import magic

def is_text_file(filepath):
    """
    使用 `python-magic` 检测文件是否为文本文件。

    :param filepath: 文件路径
    :return: 如果是文本文件返回 True,否则返回 False
    """
    # 获取文件的MIME类型
    mime = magic.Magic(mime=True)
    file_type = mime.from_file(filepath)

    # 检查MIME类型是否以 text/ 开头,或是否为常见的文本类型
    return (file_type.startswith('text/') or
            file_type in ['application/json', 'application/javascript',
                          'application/xml', 'application/x-yaml'])
2、使用启发式方法检测文件内容
def is_text_file(filepath, block_size=512):
    """
    使用启发式方法检测文件是否为文本文件。

    :param filepath: 文件路径
    :param block_size: 读取的块大小,默认为 512 字...

点击查看剩余70%

我知道答案,我要回答