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 字节 :return: 如果是文本文件返回 True,否则返回 False """ try: with open(filepath, 'rb') as f: block = f.read(block_size) # 检查是否有空字节(通常表示二进制文件) if b'\x00' in block: return False # 尝试以 UTF-8 解码 try: block.decode('utf-8') return True except UnicodeDecodeError: return False except Exception: return False3、基于文件扩展名检测文件类型
def is_text_file(filepath): """ 基于文件扩展名检测文件是否为文本文件。 :param filepath: 文件路径 :return: 如果是文本文件返回 True,否则返回 False """ # 常见文本文件扩展名列表 text_extensions = { '.txt', '.py', '.js', '.html', '.css', '.json', '.xml', '.yaml', '.yml', '.md', '.csv', '.log', '.ini', '.conf', '.sh', '.bat', '.ps1', '.java', '.cpp', '.c', '.h', '.hpp', '.rs', '.go', '.ts', '.jsx', '.vue' } return any(filepath.lower().endswith(ext) for ext in text_extensions)说明
python-magic 方法:
使用 python-magic 库检测文件的 MIME 类型。如果 MIME 类型以 text/ 开头,或者属于常见的文本类型(如 JSON、XML 等),则认为是文本文件。启发式方法:
读取文件的前 block_size 字节。检查是否包含空字节(\x00),通常表示二进制文件。尝试将内容解码为 UTF-8,如果成功则认为是文本文件。文件扩展名方法:
检查文件扩展名是否在预定义的文本文件扩展名列表中。简单但不完全可靠,因为文件扩展名可以被更改。注意事项python-magic 方法需要安装 python-magic 库(pip install python-magic)。启发式方法适用于大多数情况,但对于某些特殊文件可能不准确。文件扩展名方法简单但不可靠,适合快速检查。网友回复