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)。启发式方法适用于大多数情况,但对于某些特殊文件可能不准确。文件扩展名方法简单但不可靠,适合快速检查。网友回复
如何编写一个chrome插件实现多线程高速下载大文件?
cdn版本的vue在网页中出现typeerror错误无法找到错误代码位置怎么办?
pywebview能否使用webrtc远程控制共享桌面和摄像头?
pywebview6.0如何让窗体接受拖拽文件获取真实的文件路径?
如何在linux系统中同时能安装运行apk的安卓应用?
python有没有离线验证码识别ocr库?
各家的ai图生视频及文生视频的api价格谁最便宜?
openai、gemini、qwen3-vl、Doubao-Seed-1.6在ui截图视觉定位这款哪家更强更准?
如何在linux上创建一个沙箱隔离的目录让python使用?
pywebview如何使用浏览器自带语音识别与webspeech 的api?