遍历目录

Python中遍历目录时当然是要用os.walk啦。

一、参数

os. walk ( top, topdown=True, onerror=None, followlinks=False )
top          第一个参数为要遍历的目录的根目录
topdown  遍历的顺序:True 则为top→down,如果为False则为down→top
               如果要在遍历途中删除文件夹,最好在True的时候删除,这样该目录下的文档就不需要遍历了。
onerror   这个可以自己制定一个函数名,在出错的时候可以调用
fllowlinks 默认情况下是不会遍历快捷方式的,如果系统支持需要特殊指定

二、返回值

1)正确理解

这个函数会返回一个三元组(dirpath, dirnames, filenames).

其实os.walk是递归进行的,也就是说会从topdir开始对所有的子目录都会进行一次递归调用。

即如果topdir下面的子孙中,如果有100个目录那么这个函数会返回100+1(topdir本身)次

每次返回的都是dirpath,当前的根目录

dirnames 当前根目录下的子目录列表

filenames 当前根目录下的文件

2)以前的错误理解

如果用如下形式进行调用 :root,dirpath,filename = os.walk(topdir)

取得值中

root是以topdir作为根目录取得的一次遍历。

dirpath 是以topdir下的第一个子目录为根目录进行的遍历

filename是以topdir子孙中第二个目录作为根目录进行的遍历

也就是说最多只能遍历三个文件夹的目录,再多的话就会报如下错误

ValueError: too many values to unpack

三、代码示例

这里进行一个操作,将所有的文件名字后面添加一个_new.txt
顺便一提,这里删除文件或者删除文件树,可以用shutil(shell utility缩写)来完成。
#-*- coding:utf-8-*-   
import os

for root,dirs,files in os.walk(r'F:\python\test'):
    #os.walk会以所有子孙目录为根节点进行一次递归
    #每次返回的值中第一个为根节点,第二个为根节点下的目录列表
    #第三个为当前根节点下的文件列表

    #输出当前目录下所有目录
    for d in dirs:
        print(os.path.join(root,d))
        
    #输出带路径的所有文件:
    for f in files:
        p = os.path.join(root,f)
        os.rename(p, p[0:-4]+"_new.txt")

    print("\n")


《完》

你可能感兴趣的:(遍历目录)