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 False 3、基于文件扩展名检测文件类型 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)。启发式方法适用于大多数情况,但对于某些特殊文件可能不准确。文件扩展名方法简单但不可靠,适合快速检查。网友回复
如何破解绕开seedance2.0真人照片生成视频 限制?
python有哪些算法可以将视频中的每个帧图片去除指定区域水印合成新的视频?
iphone的激光雷达数据能否实时传输到three三维空间中?
豆包sora等ai视频生成大模型生成的视频水印如何去除?
python如何实现在电脑上拨号打电话给手机?
具身机器人与人形机器人区别?
nodejs如何将一个完整的js代码文件切割成不同的部分混淆后动态加载进入html运行?
为啥windows.onerror捕获js错误是这样的{"message":"Script error.","source":"","lineno":0,"colno":0,"stack":null,
2026年ai将全面接管编程?
WebMCP是干啥的?


