Python遍历某目录下的所有文件夹与文件路径

Python遍历某目录下的所有文件夹与文件路径
最新回答
最终心酸

2026-10-22 21:44:56

在Python中,可以使用os模块或pathlib模块来遍历目录下的所有文件夹和文件路径。以下是两种方法的详细说明和示例代码:

方法一:使用os.walk()

os.walk()是一个生成器函数,可以递归遍历目录树,返回当前目录路径、子目录列表和文件列表。

import osdef list_files(startpath): for root, dirs, files in os.walk(startpath): for dir in dirs: print(os.path.join(root, dir)) for file in files: print(os.path.join(root, file))# 示例:遍历F盘下的所有文件夹和文件list_files("F:")

说明:

  • os.walk(startpath):从startpath开始递归遍历目录树。
  • root:当前目录路径。
  • dirs:当前目录下的子目录列表。
  • files:当前目录下的文件列表。
  • os.path.join(root, name):将目录路径和文件名或子目录名连接起来,形成完整路径。
方法二:使用pathlib.Path.rglob()

pathlib模块提供了面向对象的文件系统路径操作,Path.rglob()方法可以递归遍历目录树,匹配所有文件和目录。

from pathlib import Pathdef list_files(startpath): path = Path(startpath) for item in path.rglob("*"): print(item)# 示例:遍历F盘下的所有文件夹和文件list_files("F:")

说明:

  • Path(startpath):创建一个Path对象,表示startpath路径。
  • path.rglob("*"):递归匹配当前目录及其子目录下的所有文件和目录。
  • item:每个匹配的文件或目录的Path对象,可以直接打印其路径。
注意事项
  1. 编码问题:

    如果路径中包含非ASCII字符(如中文),在Windows系统下可能需要处理编码问题。例如,在Eclipse的PyDev控制台中,可能需要使用.decode('gbk').encode('utf-8')来避免乱码。

    在Windows的cmd中运行Python脚本时,通常不需要处理编码问题,因为cmd使用GB2312编码。

  2. 系统保留目录:

    某些系统保留目录(如$RECYCLE.BIN、System Volume Information)可能会导致遍历出错。可以通过条件判断跳过这些目录。

  3. 性能考虑:

    对于非常大的目录树,os.walk()和pathlib.Path.rglob()的性能可能有所不同。可以根据实际需求选择合适的方法。

示例:跳过系统保留目录import osdef list_files(startpath): for root, dirs, files in os.walk(startpath): # 跳过系统保留目录 dirs[:] = [dir for dir in dirs if dir not in ["$RECYCLE.BIN", "System Volume Information"]] for dir in dirs: print(os.path.join(root, dir)) for file in files: print(os.path.join(root, file))list_files("F:")

说明:

  • dirs[:] = [...]:通过修改dirs列表来跳过不需要遍历的目录。这是一种原地修改列表的方法,可以避免递归进入这些目录。
总结
  • 推荐方法:优先使用os.walk(),因为它简单、高效且易于理解。
  • 替代方法:如果需要更面向对象的路径操作,可以使用pathlib.Path.rglob()。
  • 编码处理:根据运行环境(如Eclipse或cmd)决定是否需要处理编码问题。
  • 跳过目录:可以通过条件判断或修改dirs列表来跳过系统保留目录。

通过以上方法,可以灵活地遍历目录下的所有文件夹和文件路径。