Python批量重命名有序编号文件时路径跳转异常问题咨询
问题原因分析
- 核心错误原因:
os.rename方法的目标路径未指定待处理文件夹路径
调用重命名逻辑时,源文件路径拼接了目标文件夹路径os.path.join(path,i),但目标文件名直接写了spam00%s.txt,没有拼接path路径,默认会把文件重命名到Python脚本运行的工作目录(也就是filling in the gaps文件夹的上级目录),就出现了文件被移动到上级目录的问题。 - 代码同时存在其他潜在逻辑错误:
os.listdir返回的文件列表不会默认按文件名数字序号排序,直接遍历可能出现顺序错乱,重命名逻辑完全失效- 用
i[6]取序号第一位的判断逻辑不合理,当序号大于等于10时,序号占两位,该判断规则直接失效 - 序号格式化逻辑错误,当前写法在count≥10时会生成
spam0010.txt这类不符合三位序号规则的文件名
修正后参考代码
import os count = 1 path = '.\\filling in the gaps' # 先过滤出符合spam开头的txt文件,再按序号排序 files = [f for f in os.listdir(path) if f.startswith('spam') and f.endswith('.txt')] files.sort(key=lambda x:int(x[4:-4])) # 提取spam和.txt之间的数字转成整数排序 for file_name in files: # 生成三位补零的新文件名,拼接路径 new_name = f'spam{count:03d}.txt' old_path = os.path.join(path, file_name) new_path = os.path.join(path, new_name) if old_path != new_path: os.rename(old_path, new_path) count += 1
内容的提问来源于stack exchange,提问作者Andrew777
相关产品推荐
相关产品推荐

