import os
import fnmatch
def all_file(root, patterns='*',single_level=False, yield_folders=False):
"""
root: 需要遍历的目录
patterns: 需要查找的文件,以;为分割的字符串
single_level: 是否只遍历单层目录,默认为否
yield_folders: 是否包含目录本身,默认为否
"""
patterns = patterns.split(';')
for path, subdirs, files in os.walk(root):
if yield_folders:
files.extend(subdirs)
files.sort()
for name in files:
for pattern in patterns:
if fnmatch.fnmatch(name, pattern.strip()):# 去除pattern两端的空格
yield os.path.join(path, name)
if single_level:
break os.walk
os.walk是一个generator函数。每次可以得到一个三元tupple,其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。举例如下:
>>> x=os.walk('/home/tiny/workspace/py')
>>> x
>>>for i in x:
... i
...
('/home/tiny/workspace/py', ['2', '1'], ['.allfile.py.swp', 'allfile.py', 'list_get.py', 'test.py', 'tags', 'log.txt'])
('/home/tiny/workspace/py/2', [], ['fib.py', 'djcoding.py', 'drectory_travel.py', 'foo.py'])
('/home/tiny/workspace/py/1', [], ['timetest2.py', 'timetest.py']) fnmatch 实现shell风格模式匹配特定字符