遍历文件夹,作用不多说,十分重要,主要有两种方式,分别对应不同场合,walk是实打实的遍历,不过编码每次都得查,相反,有时候简单的就用listdir还是蛮方便的!

os.walk()

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) top – 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames),对应文件夹路径, 路径下所有文件夹名字, 路径下所有文件名。

topdown –可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。

onerror – 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。

followlinks – 设置为 true,则通过软链接访问目录。 返回 – root, dirs, files

top中的目录会在返回的三元组中一定会有,即root的前缀一定是top,比如:遍历../,那么返回的root是以../开头的。dirsfiles是返回的目录或者文件的名字,此时不包含任何父级的目录的信息。这个方法返回的文件名没有啥顺序。该方法可以(递归的)遍历当前目录所有文件。

一般用法:

for rt, dirs, files in os.walk(path):
    for f in files:
        fn = os.path.join(rt, f)

listdir()

只可以遍历当前文件夹下的文件,通常用法:

path = args.path_ground_truth
for fn in os.listdir(path):
    print fn
    if os.path.isfile(fn):
        print os.path.join(path,fn)