os.walk()的使用方法

本文详细介绍了Python中os.walk()函数的使用,包括自顶向下和自底向上遍历目录、获取所有文件及特定后缀文件、列出所有子目录的方法。通过实例展示了os.walk()在遍历文件系统时的强大功能。

os.walk()主要用来扫描某个指定目录下所包含的子目录和文件。这篇文章将通过几个简单的例子来说明python中os.walk()的使用方法。

一、从上到下:遍历目录(该文件夹)和子目录(子文件夹)以及文件(txt等)

假设我们的test文件夹有如下的目录结构:
在这里插入图片描述
我们首先用os.walk扫描test文件夹下所有的子目录和文件:

# 使用os.walk扫描目录
import os

for curDir, dirs, files in os.walk("test"):
    print("====================")
    print("现在的目录:" + curDir)
    print("该目录下包含的子目录:" + str(dirs))
    print("该目录下包含的文件:" + str(files))

输出:
在这里插入图片描述
上面的代码在扫描子目录和文件的时候,是采用自顶向下的方式进行扫描。如果想要自底向上地扫描子目录和文件,可以添加上topdown=False参数:

二、自底向上:遍历目录(该文件夹)和子目录(子文件夹)以及文件(txt等)

# 使用os.walk自底向上扫描目录
import os

for curDir, dirs, files in os.walk("test", topdown=False):
    print("====================")
    print("现在的目录:" + curDir)
    print("该目录下包含的子目录:" + str(dirs))
    print("该目录下包含的文件:" + str(files))

输出:
在这里插入图片描述

三、os.walk输出test文件夹下所有的文件(txt等)

import os

for curDir, dirs, files in os.walk("test"):
    for file in files:
        print(os.path.join(curDir, file))

在这里插入图片描述

可以将这些文件存到列表中,下面循环访问

四、输出test文件夹下指定后缀名(比如.txt)文件

# 使用os.walk输出某个特定后缀(比如.txt)的文件
import os

for curDir, dirs, files in os.walk("test"):
    for file in files:
        if file.endswith(".txt"):
            print(os.path.join(curDir, file))

在这里插入图片描述

五、输出test文件夹下所有的子目录(子文件夹)

# 使用os.walk输出所有的目录
import os

for curDir, dirs, files in os.walk("test"):
    for dir in dirs:
        print(dir)

在这里插入图片描述
原文:侵删

`os.walk()` 是 Python 中 `os` 模块的一个非常有用的函数,用于递归地遍历目录树。以下是该函数的详细使用说明: ### 函数签名 ```python os.walk(top, topdown=True, onerror=None, followlinks=False) ``` ### 参数解释 - `top`:要遍历的目录的根路径,可以是绝对路径或相对路径。 - `topdown`:一个布尔值,默认为 `True`。如果为 `True`,则先遍历根目录,再递归遍历子目录(即自上而下遍历);如果为 `False`,则先递归遍历子目录,最后遍历根目录(即自下而上遍历)。当 `topdown` 为 `True` 时,可以在遍历过程中修改 `dirs` 列表来控制后续要遍历的子目录;而当 `topdown` 为 `False` 时,修改 `dirs` 列表没有效果,因为子目录已经遍历过了。 - `onerror`:一个可选的错误处理函数,该函数接受一个 `OSError` 实例作为参数。如果在遍历过程中发生错误,会调用这个函数。如果没有提供该参数,则忽略错误。 - `followlinks`:一个布尔值,默认为 `False`。如果为 `True`,则会跟随符号链接并遍历链接指向的目录;如果为 `False`,则不会遍历符号链接指向的目录。 ### 返回值 `os.walk()` 是一个生成器函数,它会生成一个 3 元组 `(dirpath, dirnames, filenames)`,具体解释如下: - `dirpath`:一个字符串,表示当前正在遍历的目录的路径。 - `dirnames`:一个列表,包含当前目录下的所有子目录的名称(不包括 `.` 和 `..`)。 - `filenames`:一个列表,包含当前目录下的所有非目录文件的名称。 ### 示例代码 ```python import os from os.path import join, getsize # 遍历指定目录 for root, dirs, files in os.walk('python/Lib/email'): print(root, "consumes", end="") # 计算当前目录下所有文件的总大小 total_size = sum(getsize(join(root, name)) for name in files) print(total_size, end="") print("bytes in", len(files), "non-directory files") # 如果当前目录下有 'CVS' 子目录,则从 dirs 列表中移除,避免后续遍历 if 'CVS' in dirs: dirs.remove('CVS') ``` ### 代码解释 上述代码中,首先使用 `os.walk('python/Lib/email')` 遍历指定目录及其子目录。对于每个目录,打印出该目录的路径、该目录下所有文件的总大小以及文件的数量。同时,如果当前目录下存在 `CVS` 子目录,则将其从 `dirs` 列表中移除,这样后续就不会再遍历 `CVS` 目录了。 ### 注意事项 - 如果传递的 `top` 是相对路径,在遍历过程中不要改变当前工作目录,因为 `os.walk()` 不会改变当前工作目录,并且假设调用者也不会改变。 - 当 `followlinks` 为 `True` 时,要注意可能会出现循环引用的情况,导致无限递归。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值