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