如何使用Python列出包含指定类型文件的文件夹并实现文件批量迁移
解决方案
你的需求完全可以用Python实现,以下是适配你需求的优化后代码,解决了多文件类型匹配的问题,同时补充了文件夹检索、迁移选择的功能,也修复了你原有代码中的逻辑漏洞。
优化后完整代码
import os import shutil def main(): # 1. 输入基础配置 source_root = input("请输入要检索的根文件夹路径(例如:C:/Users/用户名/Desktop/照片):\n").strip() ext_input = input("请输入需要匹配的文件后缀,多个用英文逗号分隔(例如:jpg,png,mp4,mov):\n").strip() # 处理后缀,统一转小写,去空格 target_exts = [ext.strip().lower() for ext in ext_input.split(',') if ext.strip()] if not target_exts: print("未输入有效文件后缀,程序退出") return if not os.path.isdir(source_root): print("输入的源路径不存在,程序退出") return # 2. 递归检索所有匹配文件和对应文件夹 matched_files = [] matched_folders = set() for root, dirs, files in os.walk(source_root): for file in files: file_ext = os.path.splitext(file)[1].lower().lstrip('.') if file_ext in target_exts: full_path = os.path.join(root, file) matched_files.append(full_path) matched_folders.add(root) # 3. 展示检索结果 if not matched_files: print("未找到匹配的文件,程序退出") return print(f"\n共找到 {len(matched_files)} 个匹配文件,所属文件夹如下:") for idx, folder in enumerate(matched_folders, 1): print(f"{idx}. {folder}") # 4. 迁移选择 move_choice = input("\n请选择迁移方式:输入1迁移所有含匹配文件的整文件夹,输入2仅迁移匹配的文件:\n").strip() dest_root = input("请输入目标存储路径(例如:D:/家庭照片整理):\n").strip() os.makedirs(dest_root, exist_ok=True) if move_choice == '1': print("正在迁移整文件夹...") for folder in matched_folders: # 取文件夹名,放到目标路径下 folder_name = os.path.basename(folder) dest_path = os.path.join(dest_root, folder_name) # 避免重名,重名的话加序号 counter = 1 while os.path.exists(dest_path): dest_path = os.path.join(dest_root, f"{folder_name}_{counter}") counter +=1 shutil.move(folder, dest_path) print("所有文件夹迁移完成") elif move_choice == '2': print("正在迁移匹配文件...") for file in matched_files: file_name = os.path.basename(file) dest_path = os.path.join(dest_root, file_name) # 避免重名覆盖 counter = 1 while os.path.exists(dest_path): name, ext = os.path.splitext(file_name) dest_path = os.path.join(dest_root, f"{name}_{counter}{ext}") counter +=1 shutil.move(file, dest_path) print("所有匹配文件迁移完成") else: print("输入的选择无效,程序退出") return if __name__ == "__main__": main()
主要改动说明
- 支持用户输入任意多个文件类型,自动忽略大小写和输入时的多余空格
- 新增递归扫描子目录的功能,适配分散存储的资源检索需求
- 迁移前会先列出所有包含目标类型文件的文件夹,确认后再执行操作
- 新增重名文件/文件夹自动重命名逻辑,避免原有数据被覆盖
- 修复了原代码中不管是否选择迁移整文件夹,都会执行单文件移动的逻辑错误
内容的提问来源于stack exchange,提问作者emcc
相关产品推荐
相关产品推荐

