Python批量修改目录下.act后缀为.csv报FileNotFoundError怎么排查
排查步骤
校验读取到的文件名是否正确
在for循环第一行加入print(repr(x)),输出os.listdir读取到的每个文件名原始格式,对比和报错的file_2011_06.act是否完全一致,排查是否存在不可见的Unicode字符、前后空格等肉眼无法识别的差异。修复后缀替换逻辑的潜在问题
你当前的x.replace("act","csv")会替换文件名中所有出现的act字符串,而非仅后缀。比如文件名是act_report.act,替换后会变成csv_report.csv,虽然你本次报错的文件不存在这个问题,但建议修改为仅替换后缀的写法:new_name = os.path.splitext(x)[0] + ".csv"
避免后续文件出现误替换导致路径不匹配。确认文件未被其他程序占用
如果.act文件正被Excel、文本编辑器等其他程序打开,系统会对文件加锁,导致rename操作失败。执行脚本前确认所有待修改的.act文件都处于关闭状态。改用官方路径拼接方法
不要手动拼接路径字符串,改用os.path.join方法自动适配系统的路径分隔符,避免手动写斜杠出现的多写、漏写问题:
src_path = os.path.join(path, x) dst_path = os.path.join(path, new_name) os.rename(src_path, dst_path)
- 排查目标文件重名问题
如果目标路径下已经存在同名的.csv文件,部分Windows版本会抛出类似找不到文件的错误。你可以在rename前先判断目标文件是否存在:
if os.path.exists(dst_path): print(f"目标文件{new_name}已存在,跳过或处理重名") continue
- 增加异常捕获打印详细信息
你可以给改名逻辑加上异常捕获,输出更明确的排查信息:
try: os.rename(src_path, dst_path) print(f"修改成功:{new_name}") except Exception as e: print(f"处理文件{x}失败,错误:{e}") print(f"源文件是否存在:{os.path.exists(src_path)}") print(f"目标文件是否存在:{os.path.exists(dst_path)}")
内容的提问来源于stack exchange,提问作者TechNewbie
相关产品推荐
相关产品推荐

