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)。启发式方法适用于大多数情况,但对于某些特殊文件可能不准确。文件扩展名方法简单但不可靠,适合快速检查。网友回复


