os.walk目录遍历

每个月都有那么几天想划水,又到划水的日子了,今天分享的是刚在处理遍历目录相关用到的相关方法。

os.walk

os.walk的参数如下:

  1. os.walk(top, topdown=True, onerror=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)

例子

假设现在存在如下的文件和目录结构:

  1. test_os_walk git:(master) tree
  2. .
  3. ├── a.py
  4. ├── b.py
  5. ├── c.py
  6. ├── dir1
  7.    ├── dir4
  8.       ├── g.py
  9.       └── h.py
  10.    ├── dirx
  11.       ├── diry
  12.          └── k.py
  13.       └── z.py
  14.    ├── e.py
  15.    ├── f.py
  16.    └── g.py
  17. ├── dir2
  18.    ├── dira
  19.       └── dirb
  20.       └── dirc
  21.       └── aha.py
  22.    ├── k.py
  23.    ├── l.py
  24.    └── m.py
  25. └── dir3
  26. ├── dir5
  27.    └── z.py
  28. ├── x.py
  29. └── y.py
  30. 10 directories, 17 files

测试topdown

当我用 os.walk 遍历这个目录时,程序和输出如下:

  1. import os
  2. path = '/Users/nisen/Projects/python_advanced_class/test/test_os_walk'
  3. for root, dirs, files in os.walk(path, True):
  4. print 'root: %s' % root
  5. print 'dirs: %s' % dirs
  6. print 'files: %s' % files
  7. print ''

结果如下,从root的路径可以看出遍历是自上而下的:

  1. test git:(master) python test11.py
  2. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk
  3. dirs: ['dir1', 'dir2', 'dir3']
  4. files: ['a.py', 'b.py', 'c.py']
  5. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1
  6. dirs: ['dir4', 'dirx']
  7. files: ['e.py', 'f.py', 'g.py']
  8. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4
  9. dirs: []
  10. files: ['g.py', 'h.py']
  11. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx
  12. dirs: ['diry']
  13. files: ['z.py']
  14. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry
  15. dirs: []
  16. files: ['k.py']
  17. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2
  18. dirs: ['dira']
  19. files: ['k.py', 'l.py', 'm.py']
  20. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira
  21. dirs: ['dirb']
  22. files: []
  23. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb
  24. dirs: ['dirc']
  25. files: []
  26. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc
  27. dirs: []
  28. files: ['aha.py']
  29. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3
  30. dirs: ['dir5']
  31. files: ['x.py', 'y.py']
  32. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5
  33. dirs: []
  34. files: ['z.py']

而当设置os.walk的topdown为False时,结果如下, 可以看出他是自上而下遍历的:

  1. test git:(master) python test11.py
  2. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4
  3. dirs: []
  4. files: ['g.py', 'h.py']
  5. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry
  6. dirs: []
  7. files: ['k.py']
  8. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx
  9. dirs: ['diry']
  10. files: ['z.py']
  11. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1
  12. dirs: ['dir4', 'dirx']
  13. files: ['e.py', 'f.py', 'g.py']
  14. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc
  15. dirs: []
  16. files: ['aha.py']
  17. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb
  18. dirs: ['dirc']
  19. files: []
  20. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira
  21. dirs: ['dirb']
  22. files: []
  23. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2
  24. dirs: ['dira']
  25. files: ['k.py', 'l.py', 'm.py']
  26. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5
  27. dirs: []
  28. files: ['z.py']
  29. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3
  30. dirs: ['dir5']
  31. files: ['x.py', 'y.py']
  32. root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk
  33. dirs: ['dir1', 'dir2', 'dir3']
  34. files: ['a.py', 'b.py', 'c.py']

运行时修改遍历目录

当topdown设置为True时,可以在处理时修改返回的 dirs 列表,这样可以遍历下面的目录时会根据修改后的 dirs 来遍历。比如下面的例子,在遍历的时候不把"CSV"目录包括在内:

  1. import os
  2. from os.path import join, getsize
  3. for root, dirs, files in os.walk('python/Lib/email'):
  4. print root, "consumes",
  5. print sum(getsize(join(root, name)) for name in files),
  6. print "bytes in", len(files), "non-directory files"
  7. if 'CVS' in dirs:
  8. dirs.remove('CVS') # don't visit CVS directories

参考资料

Python os.walk() 简介的更多相关文章

  1. Python os.walk文件遍历用法【转】

    python中os.walk是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 1.载入 要使用os.walk,首先要载入该函数 可以使用以下两种方法 import os ...

  2. Python::OS 模块 -- 简介

    OS 模块简介 OS模块是Python标准库中的一个用于访问操作系统功能的模块,OS模块提供了一种可移植的方法使用操作系统的功能.使用OS模块中提供的接口,可以实现跨平台访问.但是在OS模块中的接口并 ...

  3. python os.walk()和os.path.walk()

    一.os.walk() 函数声明:os.walk(top,topdown=True,onerror=None) (1)参数top表示需要遍历的顶级目录的路径. (2)参数topdown的默认值是“Tr ...

  4. Python os.walk() 方法遍历文件目录

    概述 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 在Un ...

  5. python os.walk详解

    os模块大全详情 os.walkos.walk方法,主要用来遍历一个目录内各个子目录和子文件. os.walk(top, topdown=True, onerror=None, followlinks ...

  6. Python os.walk文件遍历

    os.walk(top, topdown=True, onerror=None, followlinks=False) 可以得到一个三元tupple(dirpath, dirnames, filena ...

  7. python os.walk()

    os.walk()返回三个参数:os.walk(dirpath,dirnames,filenames) for dirpath,dirnames,filenames in os.walk(): 返回d ...

  8. python os.walk()遍历

    os.walk()遍历 import os p='/bin' #设定一个路径 for i in os.walk(p): #返回一个元组 print (i) # i[0]是路径 i[1]是文件夹 i[2 ...

  9. Python os.walk的用法与举例

    os.walk(top, topdown=True, onerror=None, followlinks=False) 可以得到一个三元tupple(dirpath, dirnames, filena ...

随机推荐

  1. 快速排序c语言实现

    #include <stdio.h> void quick_sort(int* a, int n) { ) return; int i,j,tmp,k; k = a[n/]; ,j = n ...

  2. artTemplate教程

    artTemplate教程 官方文档 一个简单的例子 <!DOCTYPE html> <html lang="zh"> <head> <m ...

  3. vos话务抽查小方法

    问题: 假如现在公司落地前缀主要有三个分别如下: 9150:主要用来走正规量 880:用来走正规量 660:全业务(合法) 已知: 非法业务量主要有:博彩,发票,白银,黄金,期货 合法非正规量有:保健 ...

  4. NFS笔记(二)NFS服务器配置实例

    一.NFS服务器配置实例实验拓扑 二.实验要求及环境 2.1实验环境 NFS服务器 IP:192.168.8.5环境:[root@server7 ~]# uname -aLinux server7.c ...

  5. 西门子 S7-1500 PLC,使用手轮控制伺服电机

    西门子 S7-1500 PLC,使用手轮控制伺服电机 本文描述了一种,1500PLC使用叠加定位的方法,实现手轮操作的方法. 手轮操作需要的功能 数控机床等设备上的电子手轮,起源于机械手轮.机械手轮是 ...

  6. leetcode 136、Single Number

    Given a non-empty array of integers, every element appears twice except for one. Find that single on ...

  7. POJ-2139 Six Degrees of Cowvin Bacon---Floyd

    题目链接: https://vjudge.net/problem/POJ-2139 题目大意: 给定一些牛的关系,他们之间的距离为1. 然后求当前这只牛到每只牛的最短路的和,除以 n - 1只牛的最大 ...

  8. DFS+BFS(POJ3083)

    题目链接:http://poj.org/problem?id=3083 解题报告:这个题目,搜最短路,没有什么问题.优先走左边,走右边,有很多说法,思路大概都相同,都是记录当前朝向,根据数学公式(i+ ...

  9. 1012: A MST Problem

    1012: A MST Problem 时间限制: 1 Sec  内存限制: 32 MB提交: 63  解决: 33[提交][状态][讨论版][命题人:外部导入] 题目描述 It is just a ...

  10. 搭建ssm中遇到的问题

    1.多模块pom.xml文件无效 原因是没有指定模块