python 遍历目录 os.walk()

本文详细介绍了Python标准库中的os.walk()方法,包括其语法、参数及返回值等内容,并通过示例展示了如何使用该方法遍历目录树,查找特定文件。

概述
os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。
在Unix,Windows中有效。
语法
walk()方法语法格式如下:
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
参数
top – 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。
topdown –可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。
onerror – 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。
followlinks – 设置为 true,则通过软链接访问目录。
返回值
该方法没有返回值。

实例代码:

# -*- coding:utf-8 -*-

import os

for root, dirs, files in os.walk(".", topdown=False):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))

    print("\r\n")

os.walk(top, topdown=True, οnerrοr=None, followlinks=False)

返回一个3个元素的元祖,(dirpath, dirnames, filenames),

•dirpath:要列出指定目录的路径
•dirnames:目录下的所有文件夹
•filenames:目录下的所有文件
参数一:top – 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。

参数二:topdown –可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。

参数三:onerror – 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。

参数四:followlinks – 设置为 true,则通过软链接访问目录。

遍历目录下面,文件名包含‘sam’的文件:

# -*- coding:utf-8 -*-
import os

dir = '../depends/'

file_name_list = []

for root, dirs, files in os.walk(dir):
    for file_name in files:
        if 'sam' in file_name:
            file_name_list.append(file_name)


print file_name_list
### 如何使用 Python `os.walk()` 遍历目录树 `os.walk()` 是 Python 中用于遍历目录树的一个非常强大的工具。它可以递归地访问指定目录及其子目录下的所有文件和文件夹,并返回三元组 `(root, dirs, files)`,其中: - **root**: 当前正在遍历目录路径。 - **dirs**: 列表形式表示当前目录下的子目录名称集合。 - **files**: 列表形式表示当前目录下的文件名称集合。 下面是一个完整的示例代码,演示如何使用 `os.walk()` 来遍历目录树并打印出所有的文件和目录路径[^1]。 ```python import os def traverse_directory(path): for root, dirs, files in os.walk(path): # 遍历目录树 print(f"当前目录路径: {root}") print(f"子目录列表: {dirs}") print(f"文件列表: {files}") print("-" * 40) if __name__ == '__main__': directory_path = input("请输入要遍历目录路径: ").strip() if not os.path.exists(directory_path): print("错误:指定的路径不存在!") else: traverse_directory(directory_path) ``` #### 解析 1. 函数 `traverse_directory` 接收一个参数 `path`,代表需要遍历的目标目录。 2. 使用 `os.walk(path)` 进行目录遍历,每次迭代会返回一组 `(root, dirs, files)` 的数据结构。 3. 打印每一层的目录路径 (`root`)、子目录列表 (`dirs`) 和文件列表 (`files`)。 4. 如果输入的路径不存在,则提示用户重新确认路径的有效性[^3]。 通过以上代码,你可以轻松实现对任意目录的深度优先遍历,并获取其内部的所有文件和子目录信息。 --- ### 更复杂的场景应用 如果希望进一步扩展功能,比如查找特定类型的文件或者统计某个目录下的总文件数,可以通过修改逻辑来完成。以下是另一个例子,展示如何仅列出 `.txt` 类型的文件[^4]。 ```python import os def find_txt_files(path): txt_files = [] for root, _, files in os.walk(path): for file in files: if file.endswith('.txt'): # 只匹配 .txt 后缀的文件 full_path = os.path.join(root, file) txt_files.append(full_path) return txt_files if __name__ == '__main__': target_path = "/example/path" result = find_txt_files(target_path) print(f"找到的 .txt 文件总数: {len(result)}") for item in result: print(item) ``` 此脚本能够帮助我们快速定位目标目录中所有的 `.txt` 文件,并将其绝对路径存储到列表中以便后续处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值