Python中如何将文件夹内文件移至子文件夹?解决shutil.move报错
文件分类移动问题修复方案
报错原因
你代码的核心错误是将主文件夹路径your_folder传入shutil.move(),而非要移动的单个文件的完整路径。由于images_folder等是your_folder的子文件夹,这相当于尝试把父目录移入自身的子目录,直接触发了"Cannot move a directory '%s' into itself"错误。
正确实现代码
import os import shutil # 替换为实际路径 your_folder = "/path/to/your_folder" # 拼接子文件夹完整路径 images_folder = os.path.join(your_folder, "images_folder") docs_folder = os.path.join(your_folder, "docs_folder") texts_folder = os.path.join(your_folder, "texts_folder") others_folder = os.path.join(your_folder, "others_folder") # 确保目标子文件夹存在,避免移动时出错 for target_folder in [images_folder, docs_folder, texts_folder, others_folder]: if not os.path.exists(target_folder): os.makedirs(target_folder) # 遍历主文件夹下的所有条目 for filename in os.listdir(your_folder): file_full_path = os.path.join(your_folder, filename) # 只处理文件,跳过子文件夹 if not os.path.isfile(file_full_path): continue # 根据文件所属分类移动 if filename in images: shutil.move(file_full_path, os.path.join(images_folder, filename)) elif filename in docs: shutil.move(file_full_path, os.path.join(docs_folder, filename)) elif filename in texts: shutil.move(file_full_path, os.path.join(texts_folder, filename)) else: shutil.move(file_full_path, os.path.join(others_folder, filename))
关键注意事项
- 始终传递单个文件的完整路径给
shutil.move(),而非主文件夹路径 - 移动前先创建目标子文件夹,避免因文件夹不存在抛出异常
- 遍历主文件夹时跳过子文件夹,防止误操作导致的循环移动问题
- 目标路径需拼接文件名,确保文件被移动到子文件夹内,而非覆盖子文件夹
内容的提问来源于stack exchange,提问作者Nare Avetisyan
相关产品推荐
相关产品推荐

