python 遍历文件夹的两种方式

原文出处:http://laocao.blog.51cto.com/480714/525140

遍历文件夹是一个很常用的功能吧。这里分别用两种方法实现:

第一种:使用os.walk:

# -*- coding: utf-8 -*-

import os

def Test1(rootDir):

list_dirs = os.walk(rootDir)

for root, dirs, files in list_dirs:

for d in dirs:

print os.path.join(root, d)

for f in files:

print os.path.join(root, f)

第二种:使用os.listdir:

# -*- coding: utf-8 -*-

import os

def Test2(rootDir):

for lists in os.listdir(rootDir):

path = os.path.join(rootDir, lists)

print path

if os.path.isdir(path):

Test2(path)

这两种到底有什么区别呢?

这里先建立一个测试目录E:\test,目录结构如下:

E:\TEST

│--A

│  │--A-A

│  │  │--A-A-A.txt

│  │--A-B.txt

│  │--A-C

│  │  │--A-B-A.txt

│  │--A-D.txt

│--B.txt

│--C

│  │--C-A.txt

│  │--C-B.txt

│--D.txt

│--E

下面通过运行如下代码:

Test1('E:\TEST')

print '======================================='

Test2('E:\TEST')

输出结果为:

>>>

E:\TEST\A

E:\TEST\C

E:\TEST\E

E:\TEST\B.txt

E:\TEST\D.txt

E:\TEST\A\A-A

E:\TEST\A\A-C

E:\TEST\A\A-B.txt

E:\TEST\A\A-D.txt

E:\TEST\A\A-A\A-A-A.txt

E:\TEST\A\A-C\A-B-A.txt

E:\TEST\C\C-A.txt

E:\TEST\C\C-B.txt

=======================================

E:\TEST\A

E:\TEST\A\A-A

E:\TEST\A\A-A\A-A-A.txt

E:\TEST\A\A-B.txt

E:\TEST\A\A-C

E:\TEST\A\A-C\A-B-A.txt

E:\TEST\A\A-D.txt

E:\TEST\B.txt

E:\TEST\C

E:\TEST\C\C-A.txt

E:\TEST\C\C-B.txt

E:\TEST\D.txt

E:\TEST\E

>>>

可以看出,对于第一种方法,输出总是先文件夹后文件名的,对于第二种,则是按照目录树结构以及按照首字母排序进行输出的。

另外之前打印出的目录树其实就是通过对第二种方法进行稍微修改实现的,如下:

def Test3(rootDir, level=1):

if level==1: print rootDir

for lists in os.listdir(rootDir):

path = os.path.join(rootDir, lists)

print '│  '*(level-1)+'│--'+lists

if os.path.isdir(path):

Test3(path, level+1)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容