需要遍历一个目录下的所有文件和目录,最开始想到的是递归,但对于Python来说,递归真的是非常不好的一件事儿,况且已经有os.walk() 这么个有意思的语句,岂有不用之理。
先看看os.walk() 的用法:
import os
path = "/home"
for i in os.walk(path):
print i
结果:
仔细分析会发现,每行都是一个元组,里面对应三个元素:字符串、列表、列表;分别对应于当前的“根目录”、“子目录”、“文件名”。
这个当前的“根目录”会一层层地往下分析,直到里面再也没有目录为止。
于是,我的需求可以这么去实现:
for layer_root,layer_dirs,layer_files in os.walk(root_dir):
for file_ in layer_files:
file_path = os.path.join(layer_root,file_)
这样一来,就能得到该目录下的所有文件的绝对地址了。
第二层对 file_ 的循环再次让我感觉到Python的强大,它已经将对应的 layer_root 提出!!!
同理,目录只要把遍历的文件改成目录就好:
for layer_root,layer_dirs,layer_files in os.walk(root_dir):
for dir in layer_dirs:
dir_path = os.path.join(layer_root,dir)