os.walk(top, topdown=True, οnerrοr=None, followlinks=False)
-
功能概要:通过自上而下或自下而上浏览目录树来生成目录树中的文件名;对于每一个目录,会产生一个三元组
(dirpath, dirnames, filenames)
,dirpath
是一个字符串,表示父目录名,dirnames
是一个列表,里面存储着父目录dirpath
中所有的子目录,filenames
是一个列表,存储着父目录dirpath
中所有的文件;注意,列表中的名称不包含路径成分。如果需要得到完整的路径(不一定是绝对路径),可以通过代码os.path.join(dirpath, name)
来得到。 -
参数:
-
第一个参数
top
,必选参数:传入一个字符串,这个字符串是一个目录。os.walk()
方法会遍历top
目录下所有的子目录和文件,并将它们用三元组(dirpath, dirnames, filenames)
的形式返回,如下所示。目录结构如下图:
测试代码如下:
# coding=utf-8 import os # 遍历文件夹 def walk_file(directory): for root, dirs, files in os.walk(directory): # 遍历文件 for f in files: # 在windows机器上运行的,需要用gbk进行解码 print os.path.join(root, f).decode('cp936') # 遍历所有的文件夹 for d in dirs: # 在windows机器上运行的,需要用gbk进行解码 print os.path.join(root, d).decode('cp936') def main(): walk_file('top') if __name__ == '__main__': main() '''output top\文件1.txt top\文件2.txt top\父目录 top\父目录\子目录1 top\父目录\子目录2 '''
上图中传入的是一个相对路径,即和执行的
python
文件处在同一位置的top
目录;输出的结果是把top
目录里面所有的子目录和文件都遍历了一遍。 -
第二个参数
topdown
,可选参数:传入一个bool
类型,缺省是True
。如果可选参数topdown
为True
或未指定,则在其任何子目录的三元组之前生成目录的三元组(目录是自上而下生成的)。如果topdown
为False
,则在其所有子目录的三元组之后生成目录的三元组(目录是自下而上生成的)。 上面的代码已经测试了可选参数topdown
为True
的情况,下面来测试一下可选参数topdown
为False
的情况。代码如下:# coding=utf-8 import os # 遍历文件夹 def walk_file(directory): for root, dirs, files in os.walk(directory, topdown=False): # 遍历文件 for f in files: # 在windows机器上运行的,需要用gbk进行解码 print os.path.join(root, f).decode('cp936') # 遍历所有的文件夹 for d in dirs: # 在windows机器上运行的,需要用gbk进行解码 print os.path.join(root, d).decode('cp936') def main(): walk_file('top') if __name__ == '__main__': main() '''output top\父目录\子目录1 top\父目录\子目录2 top\文件1.txt top\文件2.txt top\父目录 '''
可以看到当可选参数
topdown
为True
的时候,top\父目录
在top\父目录\子目录1
和top\父目录\子目录2
之前就输出了,而当可选参数topdown
为False
的时候,top\父目录
在top\父目录\子目录1
和top\父目录\子目录2
之后才输出。这就是这个参数topdown
为True
和False
的区别。
-