如何用Python列出文件夹并依次遍历扫描多个文件夹?
实现逐个扫描并操作多个文件夹的Python方案
嘿,这个需求其实很常见,而且完全不需要真的“进入”文件夹再返回——直接基于文件夹路径操作会更安全可靠,能避免切换目录带来的潜在问题(比如异常导致后续操作路径混乱)。下面给你两种实用的实现方案:
核心思路
不用调用os.chdir()切换当前工作目录,而是直接通过绝对路径定位目标文件夹内的文件/子文件夹进行操作。这种方式逻辑清晰,也不会因为意外情况破坏后续的路径环境。
实现方案1:使用os模块(兼容所有Python版本)
这是比较传统的实现方式,适合习惯使用内置系统操作模块的开发者:
import os # 定义你要扫描的文件夹列表,支持相对路径或绝对路径 folders_to_scan = [ "./first_folder", "./second_folder", "/home/user/documents/third_folder" ] for folder in folders_to_scan: # 转换为绝对路径,避免相对路径带来的混乱 abs_folder_path = os.path.abspath(folder) # 先检查路径是否为有效文件夹 if not os.path.isdir(abs_folder_path): print(f"⚠️ 警告:{abs_folder_path} 不是有效文件夹,跳过") continue print(f"🔍 开始处理文件夹:{abs_folder_path}") # 遍历文件夹内的所有条目(文件/子文件夹) for item_name in os.listdir(abs_folder_path): item_full_path = os.path.join(abs_folder_path, item_name) if os.path.isfile(item_full_path): # 这里写入你对文件的操作逻辑 print(f"📄 处理文件:{item_full_path}") elif os.path.isdir(item_full_path): # 如果需要处理子文件夹,可在这里添加递归逻辑或其他操作 print(f"📂 发现子文件夹:{item_full_path}") print(f"✅ 文件夹 {abs_folder_path} 处理完成\n")
实现方案2:使用pathlib(Python3.4+ 推荐)
pathlib是Python3.4引入的面向对象式路径操作模块,代码更简洁易读,推荐优先使用:
from pathlib import Path # 定义文件夹列表,支持字符串或Path对象混合 folders_to_scan = [ Path("./first_folder"), "./second_folder", Path("/home/user/documents/third_folder") ] for folder in folders_to_scan: # 统一转换为绝对路径的Path对象 folder_path = Path(folder).resolve() if not folder_path.is_dir(): print(f"⚠️ 警告:{folder_path} 不是有效文件夹,跳过") continue print(f"🔍 开始处理文件夹:{folder_path}") # 遍历文件夹内的所有条目 for item in folder_path.iterdir(): if item.is_file(): # 文件操作逻辑 print(f"📄 处理文件:{item}") elif item.is_dir(): # 子文件夹处理逻辑 print(f"📂 发现子文件夹:{item}") print(f"✅ 文件夹 {folder_path} 处理完成\n")
额外注意事项
- 权限异常处理:如果某些文件夹存在访问权限限制,可以在遍历代码外层添加
try-except块,捕获PermissionError等异常,避免程序崩溃。 - 递归处理子文件夹:如果需要深入扫描所有层级的子文件夹,可以使用
os.walk()(对应os方案)或folder_path.rglob("*")(对应pathlib方案)。 - 避免切换目录:尽量不要使用
os.chdir(),如果必须切换,一定要确保在操作完成后切回原目录(可以用try...finally块保证),否则后续操作会在错误的路径下执行。
内容的提问来源于stack exchange,提问作者user13354476




