Python中遍历目录时当然是要用os.walk啦。
一、参数
os. walk ( top, topdown=True, οnerrοr=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")
《完》