Python 对目录做遍历

os.walk() 用于遍历目录里的文件,或者说迭代目录里的文件 ??? 什么意思?比如 Linux 中 find /data -type f 表示找出 /data 目录下的所有文件,它会先找出 /data 目录下的文件,如果 /data 目录下还有子目录,再继续往下从子目录中找出文件,如果子目录下还有子目录,再继续往下找,...... ,最终找出所有的文件,这就叫做遍历/迭代目录里的文件

os.walk() 语法:

walk(top, topdown=True, onerror=None, followlinks=False)

top :指定我们要遍历哪个目录,这个目录称为 top ( 顶级 ) 目录
topdown :可选参数,如果为True,则优先遍历 top 目录,如果为False,则优先遍历 top 目录下的子目录,默认是True
onerror :可选参数,默认为None,表示当我们遍历目录里的文件时,如果遍历出错,忽略并继续遍历;如果不为空,则需要提供一个自定义函数来提示出现错误后,要继续遍历,还是抛出异常中止遍历
followlinks :可选参数,如果为True,则会遍历目录的软链接指向的实际目录,如果为 False 则不会

os.walk() 用法如下:

[root@localhost ~]$ tree /data
/data
|-- 1.txt
|-- 2.txt
|-- tmp1
|   |-- 1.txt
|   `-- 2.txt
`-- tmp2
    |-- 1.txt
    `-- 2.txt
In [1]: import os

In [2]: for p, d, f in os.walk('/data'):      # os.walk()会返回一个三元组,分别是 dirpath, dirnames, filenames,这里我们用 p, d, f 来接收
   ...:     print p, d, f                     # dirpath 表示 top 目录,dirnames 表示 top 目录下的子目录(不包括该子目录下的子目录),filenames 表示该子目录下的所有文件(不包括改子目录下的子目录的文件)
   ...:     
/data ['tmp1', 'tmp2'] ['2.txt', '1.txt']     # /data 表示 top 目录,['tmp1', 'tmp2'] 表示 /data 下的子目录,['2.txt', '1.txt'] 表示子目录下的文件。然后继续遍历 - - - ╮
/data/tmp1 [] ['2.txt', '1.txt']                                                                                                                     < - - - ╯
/data/tmp2 [] ['2.txt', '1.txt']

通常,我们会用 os.walk() 找出指定目录下的所有文件:

In [1]: import os

In [2]: for p, d, f in os.walk('/data'):
   ...:     for i in f:
   ...:         print os.path.join(p, i)
   ...:         
/data/2.txt
/data/1.txt
/data/tmp1/2.txt
/data/tmp1/1.txt
/data/tmp2/2.txt
/data/tmp2/1.txt

 

 

 

 

 

 

    

posted @ 2019-01-18 11:26  孔雀东南飞  阅读(1442)  评论(0编辑  收藏  举报