Python批量重命名子文件夹遇NameError报错,求解决方案
问题解决:批量重命名子文件夹的代码错误修复
错误原因
你代码里的循环变量拼写出错了——定义的是folderame(少了一个字母l),但后续调用的是foldername,Python找不到这个正确命名的变量,所以抛出了NameError。
修正后的完整代码
首先确保安装了natsort模块(用来实现文件夹的自然排序),如果没装,先在命令行执行:
pip install natsort
然后使用下面的代码:
import os from natsort import natsorted def rename_folders(path, new_name): # 遍历按自然排序后的文件夹列表,序号直接从1开始 for i, foldername in enumerate(natsorted(os.listdir(path)), start=1): old_full_path = os.path.join(path, foldername) # 只处理文件夹,避免误操作路径里的文件 if os.path.isdir(old_full_path): new_full_path = os.path.join(path, f"{new_name}{i}") os.rename(old_full_path, new_full_path) # 替换成你的实际路径后调用 rename_folders('C:/Users/me/Dropbox/TASK/', 'file1')
优化说明
- 去掉了
os.chdir,直接用os.path.join拼接绝对路径,避免切换目录后出现的路径混乱问题 - 增加了
os.path.isdir判断,确保只重命名文件夹,不会误改路径里的文件 - 用
enumerate(..., start=1)让序号直接从1开始,不用额外写i+1 - 用f-string格式化字符串,比
format写法更简洁易读
后续提取PDF的小方案
重命名完文件夹后,要批量提取里面的PDF,可以用这段代码:
import os import shutil from glob import glob def extract_pdfs(source_dir, target_dir): # 自动创建目标文件夹(如果不存在) os.makedirs(target_dir, exist_ok=True) # 遍历所有子文件夹 for folder in os.listdir(source_dir): folder_path = os.path.join(source_dir, folder) if os.path.isdir(folder_path): # 查找当前文件夹里的所有PDF pdf_list = glob(os.path.join(folder_path, "*.pdf")) for pdf in pdf_list: # 提取PDF文件名,复制到目标目录 pdf_filename = os.path.basename(pdf) shutil.copy(pdf, os.path.join(target_dir, pdf_filename)) # 调用示例:第一个参数是子文件夹所在路径,第二个是PDF存放的目标路径 extract_pdfs('C:/Users/me/Dropbox/TASK/', 'C:/Users/me/Dropbox/Extracted_PDFs/')
内容的提问来源于stack exchange,提问作者Denise
相关产品推荐
相关产品推荐

