python os.walk详解
os.walk
os.walk方法,主要用来遍历一个目录内各个子目录和子文件。
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).
通过for循环自动完成递归枚举
目录是这样的文件目录结构:
[root@xiaoma mcw]# tree . ├── cur1.txt ├── cur2.txt ├── mcw │ ├── m1.txt │ └── m2.txt ├── test.py └── xiaoma ├── x1.txt └── x2.txt 2 directories, 7 files
(1)
import os result = os.walk("./") print(result) ------------------结果: [root@xiaoma mcw]# python test.py <generator object walk at 0x7f0e90ad17d0>
(2)os.walk是很多个元组
import os result = os.walk("./") print(result) for i in result: print(i) #i代表每个目录以及目录下的文件名字。 ---------------结果; [root@xiaoma mcw]# python test.py ('./', ['xiaoma', 'mcw'], ['test.py', 'cur2.txt', 'cur1.txt']) #当前目录 当前目录下的目录,当前目录下的文件 ('./xiaoma', [], ['x1.txt', 'x2.txt']) 子目录以及子目录写的文件 ('./mcw', [], ['m2.txt', 'm1.txt']) #代码解析:os.walk("./") 的第一个元组的第一个元素是指定目录的名字,第二个元素当前目录下的子目录,第三个元素是当前目录下的文件列表。 第二个元组的第一个元素便是子目录的名字字符串;第二个元素就是子目录的子目录,如果没有就是空列表;第三个元素就是这个子目录下的文件列表。 第三个元组是当前目录下的另一个子目录。第一个元素是子目录的名称字符串;第二个元素是子目录的子目录。第三个元素是这个子目录下的文件列表。
(3)a,正在查询的./目录下的单层目录
import os result = os.walk("./") for a,b,c in result: print(a) #a所有目录 ------------------结果: [root@xiaoma mcw]# python test.py ./ ./xiaoma ./mcw
4)b表示这个目录下的各个子目录列表,子目录没有子目录就显示为空列表
import os result = os.walk("./") for a,b,c in result: print(b) --------------结果: [root@xiaoma mcw]# python test.py ['xiaoma', 'mcw'] #查询的目录./下的子目录 [] #xiaoma目录下的子目录 [] #mcw目录下的子目录
5)#c,表示各个目录下的文件列表
import os result = os.walk("./") for a,b,c in result: print(c) #c,各个目录文件列表 ----------------结果: [root@xiaoma mcw]# python test.py ['test.py', 'cur2.txt', 'cur1.txt'] ['x1.txt', 'x2.txt'] ['m2.txt', 'm1.txt']
6)遍历这个目录下所有文件,包括子目录的文件
import os result = os.walk("./") for a,b,c in result: # a,正在查看的目录 b,此目录下的文件夹 c,此目录下的文件 for item in c: path = os.path.join(a,item) # print(path) -----------------结果: [root@xiaoma mcw]# python test.py ./test.py ./cur2.txt ./cur1.txt ./xiaoma/x1.txt ./xiaoma/x2.txt ./mcw/m2.txt ./mcw/m1.txt
7)有三级以上的目录
('./', ['xiaoma', 'mcw'], ['test.py', 'cur2.txt', 'cur1.txt']) ('./xiaoma', [], ['x1.txt', 'x2.txt']) ('./mcw', ['haizi'], ['m2.txt', 'm1.txt']) ('./mcw/haizi', [], [])
参考:
1)https://www.cnblogs.com/JetpropelledSnake/p/8982495.html