Windows系统下如何用Python获取隐藏文件的元数据?
读取Windows隐藏文件元数据的调整方案
Windows系统的隐藏文件通过文件属性标识而非文件名前缀区分,要让原读取元数据的方法包含隐藏文件,核心是取消对隐藏属性文件的过滤,并正确识别这类文件。以下是适配原方案的具体调整:
1. 基于os+pywin32的修改方案
如果原方案使用os.walk遍历目录,默认os.walk不会跳过隐藏文件,但需明确处理文件属性以确保不遗漏:
代码实现
import os import win32api import win32con import win32com.client def get_file_metadata(file_path): """读取单个文件的元数据(沿用原Shell方法)""" try: shell = win32com.client.Dispatch("Shell.Application") folder = shell.NameSpace(os.path.dirname(file_path)) file_item = folder.ParseName(os.path.basename(file_path)) # 示例获取常用元数据,字段索引可按需调整 return { "文件名": folder.GetDetailsOf(file_item, 0), "大小": folder.GetDetailsOf(file_item, 1), "修改日期": folder.GetDetailsOf(file_item, 3), "作者": folder.GetDetailsOf(file_item, 20) } except Exception as e: return f"读取失败: {str(e)}" def traverse_all_files(root_dir): """遍历目录下所有文件(含隐藏文件)并读取元数据""" for dirpath, _, filenames in os.walk(root_dir): for filename in filenames: full_path = os.path.join(dirpath, filename) # 判断是否为隐藏文件 attrs = win32api.GetFileAttributes(full_path) is_hidden = bool(attrs & win32con.FILE_ATTRIBUTE_HIDDEN) metadata = get_file_metadata(full_path) print(f"路径: {full_path} | 隐藏状态: {is_hidden} | 元数据: {metadata}")
2. 用pathlib简化遍历(Python 3.4+)
pathlib的递归遍历会默认包含所有文件,结合属性判断更简洁:
代码实现
from pathlib import Path import win32api import win32con import win32com.client def read_metadata_for_all_files(root_dir): shell = win32com.client.Dispatch("Shell.Application") root = Path(root_dir) # 递归遍历所有文件 for file in root.rglob("*"): if file.is_file(): file_path_str = str(file) # 检查隐藏属性 attrs = win32api.GetFileAttributes(file_path_str) is_hidden = bool(attrs & win32con.FILE_ATTRIBUTE_HIDDEN) # 读取元数据 folder = shell.NameSpace(file.parent) file_item = folder.ParseName(file.name) title = folder.GetDetailsOf(file_item, 20) print(f"文件: {file_path_str} (隐藏: {is_hidden}) | 标题: {title}")
关键注意事项
- 不要通过
filename.startswith('.')过滤文件:Windows隐藏文件不一定以.开头,必须通过FILE_ATTRIBUTE_HIDDEN属性判断。 - 确保脚本有足够权限:部分系统目录的隐藏文件需要管理员权限才能读取元数据。
- 元数据字段索引:不同Windows版本的字段索引可能略有差异,可通过遍历
folder.GetDetailsOf(None, i)获取所有字段名对应索引。
内容的提问来源于stack exchange,提问作者J.N.
相关产品推荐
相关产品推荐

