python os.walk_Python os.walk() 简介
os.walk目录遍历
每个月都有那么几天想划水,又到划水的日子了,今天分享的是刚在处理遍历目录相关用到的相关方法。
os.walk
os.walk的参数如下:
os.walk(top, topdown=True, οnerrοr=None, followlinks=False)
其中:
top是要遍历的目录。
topdown是代表要从上而下遍历还是从下往上遍历。
onerror可以用来设置当便利出现错误的处理函数(该函数接受一个OSError的实例作为参数),设置为空则不作处理。
followlinks表示是否要跟随目录下的链接去继续遍历,要注意的是,os.walk不会记录已经遍历的目录,所以跟随链接遍历的话有可能一直循环调用下去。
os.walk返回的是一个3个元素的元组 (root, dirs, files) ,分别表示遍历的路径名,该路径下的目录列表和该路径下文件列表。注意目录列表和文件列表不是具体路径,需要具体路径(从root开始的路径)的话可以用 os.path.join(root,dir) 和 os.path.join(root,dir) 。
例子
假设现在存在如下的文件和目录结构:
➜ test_os_walk git:(master) ✗ tree
.
├── a.py
├── b.py
├── c.py
├── dir1
│ ├── dir4
│ │ ├── g.py
│ │ └── h.py
│ ├── dirx
│ │ ├── diry
│ │ │ └── k.py
│ │ └── z.py
│ ├── e.py
│ ├── f.py
│ └── g.py
├── dir2
│ ├── dira
│ │ └── dirb
│ │ └── dirc
│ │ └── aha.py
│ ├── k.py
│ ├── l.py
│ └── m.py
└── dir3
├── dir5
│ └── z.py
├── x.py
└── y.py
10 directories, 17 files
测试topdown
当我用 os.walk 遍历这个目录时,程序和输出如下:
import os
path = '/Users/nisen/Projects/python_advanced_class/test/test_os_walk'
for root, dirs, files in os.walk(path, True):
print 'root: %s' % root
print 'dirs: %s' % dirs
print 'files: %s' % files
print ''
结果如下,从root的路径可以看出遍历是自上而下的:
➜ test git:(master) ✗ python test11.py
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk
dirs: ['dir1', 'dir2', 'dir3']
files: ['a.py', 'b.py', 'c.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1
dirs: ['dir4', 'dirx']
files: ['e.py', 'f.py', 'g.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4
dirs: []
files: ['g.py', 'h.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx
dirs: ['diry']
files: ['z.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry
dirs: []
files: ['k.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2
dirs: ['dira']
files: ['k.py', 'l.py', 'm.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira
dirs: ['dirb']
files: []
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb
dirs: ['dirc']
files: []
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc
dirs: []
files: ['aha.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3
dirs: ['dir5']
files: ['x.py', 'y.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5
dirs: []
files: ['z.py']
而当设置os.walk的topdown为False时,结果如下, 可以看出他是自上而下遍历的:
➜ test git:(master) ✗ python test11.py
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4
dirs: []
files: ['g.py', 'h.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry
dirs: []
files: ['k.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx
dirs: ['diry']
files: ['z.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1
dirs: ['dir4', 'dirx']
files: ['e.py', 'f.py', 'g.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc
dirs: []
files: ['aha.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb
dirs: ['dirc']
files: []
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira
dirs: ['dirb']
files: []
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2
dirs: ['dira']
files: ['k.py', 'l.py', 'm.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5
dirs: []
files: ['z.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3
dirs: ['dir5']
files: ['x.py', 'y.py']
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk
dirs: ['dir1', 'dir2', 'dir3']
files: ['a.py', 'b.py', 'c.py']
运行时修改遍历目录
当topdown设置为True时,可以在处理时修改返回的 dirs 列表,这样可以遍历下面的目录时会根据修改后的 dirs 来遍历。比如下面的例子,在遍历的时候不把"CSV"目录包括在内:
import os
from os.path import join, getsize
for root, dirs, files in os.walk('python/Lib/email'):
print root, "consumes",
print sum(getsize(join(root, name)) for name in files),
print "bytes in", len(files), "non-directory files"
if 'CVS' in dirs:
dirs.remove('CVS') # don't visit CVS directories
参考资料
python os.walk_Python os.walk() 简介相关推荐
- 【Python 标准库学习】多种操作系统接口和常用路径操作库 — os 与 os.path
欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ os 模块简介:主流操作系统有 Windows.UNIX.Mac OS 等,os ...
- python 畅玩os模块 顺便批量修改个图片尺寸
目录 吐槽 文章介绍 OS模块 简介 常用功能 ▲(附)os.path 创建/删除 目录/文件 更改 目录/文件 名/位置 ▲获取 路径/目录/文件 名 批量处理图片尺寸 实现思路 详细步骤 安装PI ...
- 进阶第四课 Python模块之os
os模块,一起来看下都有哪些常用的方法,也就是有哪些函数或者功能. 首先了解一下os的组成 >>> import os >>> dir(os) ['DirEntry ...
- python os模块安装_二十七、深入浅出Python中的 os模块
「@Author: Runsen」 当初学Python的时候,把一些标准库和第三方开源库学的七零八落,不成系统,正好趁这个机会来系统的整理一下,先从Python常用的标准库os开始吧. os OS模块 ...
- python根须系统斜杠_深入浅出Python中的os模块
「@Author:Runsen」 当初学Python的时候,把一些标准库和第三方开源库学的七零八落,不成系统,正好趁这个机会来系统的整理一下,先从Python常用的标准库os开始吧. os OS模块简 ...
- Python 内置模块之 os
os.walk os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情.简单来说,就是挨个遍历指定路径下的目录(文件夹)和文件.用于通过在目录树中游走输出 ...
- python知识总结os**
1.os.walk的用法 os.walk的函数声明为: walk(top, topdown=True, οnerrοr=None, followlinks=False) 参数 top 是你所要便利的目 ...
- Python 标准库 —— os 路径(os.path)
<a href="http://blog.csdn.net/lanchunhui/article/details/50193327", target="_blank ...
- Python常用模块os——与操作系统交互
os.getcwd() 返回当前工作目录绝对路径 Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit ...
最新文章
- Push Notifications
- AutoCAD如何输入文字
- 【MFC】根据菜单创建工具栏
- 账户配置 三: Gmail
- Oracle命令--如何查看oracle中创建的所有目录
- 马斯克谈买比特币:当法币实际利率为负时 只有“傻子”才不放眼他处
- 串的复制——串传送指令MOVSB和方向标志位DF和CLD和REP
- PHP:车牌照合法性
- fei 正则表达式_正则表达式 匹配 中文/日文/韩文
- AVS2音视频编码标准
- word中公式编辑完后光标靠下解决办法
- D3D11 加载静态3D模型(.obj格式)
- 高德离线地图vue-amap的api文档(1):创建地图,撒点等等
- 在线点餐APP开发前景如何?
- Docker部署Django由浅入深系列(中): 双容器部署Django + Uwsgi + Nginx
- c语言中对float保留固定3位,float保留三位小数 float,double 除法 保留 指定位
- threejsV0.143.0版本如何设置uv坐标贴图
- canvas效果案例:安卓机器人
- uniapp使用Vant ui
- 示波器常用的13个概念
热门文章
- Server 2012使用Windows PowerShell cmdlet安装角色和角色服务功能
- http协议知识msdn
- 插入数据的时候出现错误:Error during job, obtaining debugging information…
- run as date怎么用_熟词僻义 | date是一种什么水果?
- 日志文件和mysql同步到kafka_logstash_output_kafka:Mysql 同步 Kafka 深入详解
- 安装linux必不可少的一个分区,安装linux系统对硬盘分区时,必须有的两种分区类型是什么?...
- java接口如何接受语音参数_Java 是如何优雅地实现接口数据校验的?
- Win7系统更换软件图标的详细方法
- 预处理prepareStatement是怎么防止sql注入漏洞的?
- @Autowired注入为null的几种情况