python之os.walk()

本文深入解析了Python中os模块的walk()函数,介绍了其功能、声明、输入参数、返回值及使用方法。walk()是一个高效处理文件和目录遍历的工具,通过生成器返回遍历过程中的目录和文件信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能:

os.walk() 是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

声明:

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

输入参数:

  • top:所需遍历目录的路径
  • topdown:True时,则优先遍历top目录,否则优先遍历top的子目录(默认为True)
  • onerror:需要一个 callable 对象,当walk需要异常时,会调用
  • followlinks:True时,则会遍历目录下的快捷方式(linux 下是 symbolic
    link)实际所指的目录(默认False)

返回值:

  • 返回值是一个生成器(generator),也就是需要不断的遍历它,来获得所有的内容。

  • 每次遍历的对象都是返回的是一个三元组**(root,dirs,files)**。这个三元组表示当前遍历的目录的信息,从top根目录开始到top根目录的每个子目录

    root 是当前遍历目录的相对路径
    dirs 是一个 list ,内容是当前目录的子目录名称(不包括子目录)
    files 同样是 list , 内容是当前目录的文件名称(不包括子目录)

代码说明:

import os

result = os.walk(path)
for r in result:
	sub_dir=[r]
	
# 第0次遍历,r对应的是根目录top的信息,即r的root是根目录的相对路径,dirs是根目录的子目录名称list,files是根目录的文件名称list
#第1次遍历,r对应的是根目录top的第一个子目录subDir1的信息,即r的root是subDir1的相对路径,dirs是subDir1的子目录名称list,files是subDir1的文件名称list
#... ... ...
#第k次遍历,r对应的是根目录top的第k个子目录subDirk的信息,即r的root是subDirk的相对路径,dirs是subDirk的子目录名称list,files是subDirk的文件名称list

#最终,sub_dir是包括top根目录及其所有子目录的相对路径的一个列表

参考链接:https://www.jianshu.com/p/bbad16822eab

### Python `os.walk` 函数使用方法 `os.walk()` 是 Python 中的一个强大工具,用于遍历目录树并生成指定目录内的文件名。该函数返回一个三元组 `(dirpath, dirnames, filenames)`,分别表示当前目录路径、当前目录下的子目录列表以及当前目录下的非目录文件列表[^1]。 以下是关于如何使用 `os.walk()` 的具体说明和示例: #### 基本语法 ```python import os for dirpath, dirnames, filenames in os.walk('your_directory'): print(f'发现目录: {dirpath}') print(f'其子目录为: {dirnames}') print(f'其中的文件为: {filenames}') ``` 在此代码片段中: - `'your_directory'` 表示要遍历的目标目录。 - `dirpath` 是当前正在访问的目录路径。 - `dirnames` 列表包含了当前目录下所有的子目录名称。 - `filenames` 列表则列出了当前目录下的所有文件名称[^2]。 #### 实际应用案例 下面展示了一个更具体的例子,演示如何利用 `os.walk()` 打印整个目录结构及其内部的所有文件。 ```python import os def list_files(startpath): for root, dirs, files in os.walk(startpath): # 遍历 startpath 下的所有目录及文件 level = root.replace(startpath, '').count(os.sep) # 计算缩进层次 indent = ' ' * 4 * (level) # 设置缩进量 print('{}{}/'.format(indent, os.path.basename(root))) # 输出当前目录 subindent = ' ' * 4 * (level + 1) # 子级缩进 for f in files: print('{}{}'.format(subindent, f)) # 输出当前目录下的文件 list_files('/example/path') # 替换为你想要遍历的实际路径 ``` 此脚本通过递归方式显示目标路径 `/example/path` 及其所有子目录的内容,并以清晰的分层形式呈现出来。 #### 特殊情况处理 如果希望控制不进入某些特定子目录,则可以修改 `dirnames` 列表。例如,在遍历时跳过 `.git` 或者其他隐藏目录: ```python for dirpath, dirnames, filenames in os.walk('your_directory', topdown=True): # 移除不需要遍历的子目录 dirnames[:] = [d for d in dirnames if not d.startswith('.')] print(dirpath) print(dirnames) print(filenames) ``` 这里的关键在于对 `dirnames[:]=...` 进行重新赋值操作,这会影响后续迭代过程中的子目录选取范围。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值