python os.walk 学习小结

当需要对一个目录下的文件做些处理时,可以使用os.walk函数,迭代这个目录下的所有文件,然后干点啥。

新建立一个目录,如下:

tree /tmp/test/
/tmp/test/
├── 0.txt
├── 1.txt
├── 2.txt
├── 3.txt
├── 4.txt
├── a
│   ├── 0.txt
│   ├── 1.txt
│   ├── 2.txt
│   ├── 3.txt
│   ├── 4.txt
│   └── b
│       ├── 0.txt
│       ├── 1.txt
│       ├── 2.txt
│       ├── 3.txt
│       ├── 4.txt
│       └── c
│           ├── 0.txt
│           ├── 1.txt
│           ├── 2.txt
│           ├── 3.txt
│           └── 4.txt
└── d
    ├── 0.txt
    ├── 1.txt
    ├── 2.txt
    ├── 3.txt
    └── 4.txt

4 directories, 25 files

函数介绍(偷别人的…):

os.walk(top, topdown=True, onerror=None, followlinks=False)
可以得到一个三元tupple(dirpath, dirnames, filenames),
第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
dirpath 是一个string,代表目录的路径,
dirnames 是一个list,包含了dirpath下所有子目录的名字。
filenames 是一个list,包含了非目录文件的名字。
这些名字不包含路径信息,如果需要得到全路径,需要使用os.path.join(dirpath, name).

可以分别输出/tmp/test下root,dirs,files看看:

In [3]: for root,dirs,files in os.walk("/tmp/test"):
   ...:     print root,dirs,files
   ...:
/tmp/test ['a', 'd'] ['0.txt', '1.txt', '2.txt', '3.txt', '4.txt']
/tmp/test/a ['b'] ['0.txt', '1.txt', '2.txt', '3.txt', '4.txt']
/tmp/test/a/b ['c'] ['0.txt', '1.txt', '2.txt', '3.txt', '4.txt']
/tmp/test/a/b/c [] ['0.txt', '1.txt', '2.txt', '3.txt', '4.txt']
/tmp/test/d [] ['0.txt', '1.txt', '2.txt', '3.txt', '4.txt']

In [4]:

迭代输出/tmp/test/下面所有的文件:

In [2]: for root,dirs,files in os.walk("/tmp/test"):
   ...:     for file in files:
   ...:         print os.path.join(root,file)
   ...:
/tmp/test/0.txt
/tmp/test/1.txt
/tmp/test/2.txt
/tmp/test/3.txt
/tmp/test/4.txt
/tmp/test/a/0.txt
/tmp/test/a/1.txt
/tmp/test/a/2.txt
/tmp/test/a/3.txt
/tmp/test/a/4.txt
/tmp/test/a/b/0.txt
/tmp/test/a/b/1.txt
/tmp/test/a/b/2.txt
/tmp/test/a/b/3.txt
/tmp/test/a/b/4.txt
/tmp/test/a/b/c/0.txt
/tmp/test/a/b/c/1.txt
/tmp/test/a/b/c/2.txt
/tmp/test/a/b/c/3.txt
/tmp/test/a/b/c/4.txt
/tmp/test/d/0.txt
/tmp/test/d/1.txt
/tmp/test/d/2.txt
/tmp/test/d/3.txt
/tmp/test/d/4.txt

In [3]:

参考资料:

Python os.walk的用法与举例:http://blog.csdn.net/bagboy_taobao_com/article/details/8938126

python os.walk: https://docs.python.org/2.7/library/os.html#module-os