You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:55:17