Python获取目录下文件创建日期、大小结果异常的排查与实现
脚本存在的核心问题
- 输出所有文件属性完全一致的根因:循环启动前,代码固定使用目录自身的路径
/users/sarah/documents调用os.stat获取属性,拿到的是目录本身的创建时间、目录元数据的占用大小,这两个值被存为固定常量,循环打印时没有针对每个文件单独查询对应属性,自然所有输出的属性都和目录属性完全相同。 - 路径不完整隐患:
os.listdir仅返回目录下的文件名列表,没有和父目录路径拼接成完整的可访问路径,就算把属性查询逻辑移到循环内,直接传入文件名做参数,也会因为相对路径不匹配无法定位到目标文件。 - 待补齐的功能与细节问题:
os.stat返回的st_ctime是Unix时间戳浮点值,直接输出没有可读性,需要转换为标准日期格式。- 未实现文件信息导出到文本文件的逻辑,导出时需要指定UTF-8编码避免中文文件名乱码。
- 未实现按文件大小阈值过滤的筛选逻辑。
修正后的可运行参考实现
import os from datetime import datetime # 可自定义配置项 TARGET_DIR = '/users/sarah/documents' # 待扫描的目标目录 OUTPUT_FILE = 'file_stat_result.txt' # 结果导出的文本文件路径 MIN_FILE_SIZE = 0 # 大小筛选阈值,单位字节,0代表不做大小筛选,修改为对应值即可过滤 # 例:设置为1024*10 则仅导出大小大于10KB的文件 if __name__ == '__main__': # 校验目标目录是否存在 if not os.path.isdir(TARGET_DIR): print(f"目标目录不存在:{TARGET_DIR}") exit() export_content = [] # 遍历目录下所有条目 for file_name in os.listdir(TARGET_DIR): # 拼接成系统兼容的完整文件路径 full_file_path = os.path.join(TARGET_DIR, file_name) # 跳过目录下的子文件夹,仅统计普通文件 if not os.path.isfile(full_file_path): continue # 针对当前遍历的单个文件查询真实属性 file_stat = os.stat(full_file_path) current_file_size = file_stat.st_size # 按设定的大小阈值过滤 if current_file_size < MIN_FILE_SIZE: continue # 转换时间戳为可读的创建日期格式 create_date = datetime.fromtimestamp(file_stat.st_ctime).strftime('%Y-%m-%d %H:%M:%S') # 拼接单条结果 result_line = f"文件名:{file_name} | 创建日期:{create_date} | 文件大小:{current_file_size} bytes" print(result_line) export_content.append(result_line) # 将结果写入文本文件,指定UTF-8编码避免中文乱码 with open(OUTPUT_FILE, 'w', encoding='utf-8') as f: f.write('\n'.join(export_content)) print(f"\n统计结果已导出至:{os.path.abspath(OUTPUT_FILE)}")
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

