如何在Python中获取文件扩展名对应的文件类型名称
从文件扩展名获取Windows文件类型名称的Python实现
要实现和Windows资源管理器一致的文件类型名称获取,直接调用Windows系统API即可,下面提供两种可行方案:
方案一:使用pywin32库
需要先安装依赖库:
pip install pywin32
实现代码:
import win32api import win32con def get_file_type_name(extension): # 统一扩展名格式,确保以.开头 if not extension.startswith('.'): extension = '.' + extension try: # 调用SHGetFileInfo获取文件类型名称 _, _, _, _, type_name = win32api.SHGetFileInfo( extension, win32con.FILE_ATTRIBUTE_NORMAL, win32con.SHGFI_TYPENAME ) return type_name except Exception: return f"未知文件类型 ({extension})"
方案二:使用ctypes(无需额外安装库)
直接调用Windows系统的shell32.dll,不需要安装第三方库:
import ctypes from ctypes import wintypes def get_file_type_name(extension): # 统一扩展名格式 if not extension.startswith('.'): extension = '.' + extension # 定义所需的常量和结构体 SHGFI_TYPENAME = 0x000000400 FILE_ATTRIBUTE_NORMAL = 0x80 class SHFILEINFO(ctypes.Structure): _fields_ = [ ("hIcon", wintypes.HICON), ("iIcon", wintypes.INT), ("dwAttributes", wintypes.DWORD), ("szDisplayName", wintypes.CWCHAR * 260), ("szTypeName", wintypes.CWCHAR * 80) ] shfi = SHFILEINFO() # 调用SHGetFileInfoW获取类型名称 ctypes.windll.shell32.SHGetFileInfoW( extension, FILE_ATTRIBUTE_NORMAL, ctypes.byref(shfi), ctypes.sizeof(shfi), SHGFI_TYPENAME ) return shfi.szTypeName if shfi.szTypeName else f"未知文件类型 ({extension})"
使用示例
print(get_file_type_name('.txt')) # 输出:文本文档 print(get_file_type_name('.docx')) # 输出:Microsoft Word 文档 print(get_file_type_name('.xyz')) # 输出:未知文件类型 (.xyz)
注意事项
- 两种方案均依赖Windows系统API,仅能在Windows环境下运行,符合你开发Windows 10资源管理器克隆的需求
- 如果扩展名未在系统中注册关联类型,会返回自定义的“未知文件类型”提示
- 传入的扩展名需确保格式正确,建议统一处理为以
.开头的形式
内容的提问来源于stack exchange,提问作者Platinum
相关产品推荐
相关产品推荐

