递归修改文件日期格式脚本遇FileNotFoundError问题求助
问题解决:文件重命名时的FileNotFoundError错误
你的问题出在文件路径的拼接上:os.walk返回的name只是文件名,不是完整路径,直接用os.rename(name, new_name)的话,脚本会在自己的当前工作目录里找这个文件,而不是在遍历到的子目录(root变量对应的目录)里找,所以才会报找不到文件的错误。
修正后的脚本
import os import datetime dir_path = r"XXX\Fake" for root, dirs, files in os.walk(dir_path): for name in files: # 只处理符合格式的MODIS_YYYYMMDD.txt文件,避免误操作其他文件 if name.startswith("MODIS_") and name.endswith(".txt") and len(name) == 19: # MODIS_YYYYMMDD.txt的长度是19 try: # 解析日期部分 date_str = name[7:15] d = datetime.datetime.strptime(date_str, '%Y%m%d').date() # 拼接完整的原路径和新路径 old_full_path = os.path.join(root, name) new_full_path = os.path.join(root, f"MODIS_{str(d)}.txt") # 执行重命名 os.rename(old_full_path, new_full_path) # 可选:打印日志确认操作 print(f"已重命名: {old_full_path} -> {new_full_path}") except ValueError: # 跳过日期格式不符合的文件 print(f"跳过无效文件: {os.path.join(root, name)}")
关键修改点
- 用
os.path.join(root, name)生成完整的原文件路径,而不是只用文件名name - 新文件名同样要拼接
root,确保重命名后文件还在原目录里 - 增加了格式判断和异常捕获,避免脚本遇到非目标文件时崩溃
等测试没问题后,把.txt改成.tar就能处理实际的MODIS文件了。
内容的提问来源于stack exchange,提问作者rweber
相关产品推荐
相关产品推荐

