You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用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

火山引擎 最新活动