1、关于os.walk
OS.walk() 通过自顶向下或自底向上遍历树来生成目录树中的文件名。 对于以目录 top 为根的树中的每个目录(包括 top 本身),它产生一个 3 元组(目录路径、目录名、文件名)。
root :仅从您指定的内容中打印出目录。
dirs :从根打印出子目录。其中输出依次为目录下的文件夹,
文件夹1里面的文件夹,文件夹2里面的文件夹,文件夹3里面的文件夹。
files :打印出根目录和目录中的所有文件。
例如:Test文件夹下面的目录
for (root,dirs,files) in os.walk("E:\Test"):
print(f'root is {root}')
print(f'dirs is {dirs}')
print(f'files is {files}')
print('\n')
结果如下:
root is E:\Test
dirs is ['testa', 'testb', 'testc']
files is ['test4.txt.docx']
root is E:\Test\testa
dirs is ['a1', 'a2']
files is []
root is E:\Test\testa\a1
dirs is []
files is ['a1.txt.docx']
root is E:\Test\testa\a2
dirs is []
files is ['a2.txt.docx']
root is E:\Test\testb
dirs is []
files is ['test3.txt.docx']
root is E:\Test\testc
dirs is []
files is []
Process finished with exit code 0
应用:获取该路径下的全部文件夹,不包含文件夹路径,只包含文件夹名称,如下:
for (root,dirs,files) in os.walk("E:\Test"):
for sub_dir in dirs:
print(sub_dir)
结果如下:
testa
testb
testc
a1
a2
其中a1与a2是testa,b子目录下的文件夹
所以这几行代码可以遍历Test目录下的所有文件夹。
同理可得遍历所有文件。
如果想为这些文件夹加上绝对路径,
for (root,dirs,files) in os.walk("E:\Test"):
for sub_dir in dirs:
print(sub_dir)
i_dir = os.path.join(root, sub_dir) # 获取各类的文件夹 绝对路径
print(i_dir)
结果如下:
testa
E:\Test\testa
testb
E:\Test\testb
testc
E:\Test\testc
a1
E:\Test\testa\a1
a2
E:\Test\testa\a2
2、os.listdir
python中的os.listdir()方法用于获取指定目录下所有文件和目录的列表。 如果我们不指定任何目录,则将返回当前工作目录中的文件和目录列表。
参数:
路径(可选):目录的路径
返回类型:此方法返回指定路径中所有文件和目录的列表。 该方法的返回类型是列表。
path = "E:\Test"
dir_list = os.listdir(path)
print(dir_list)
结果如下:返回的是test目录下的所有文件夹以及文件
['test4.txt.docx', 'testa', 'testb', 'testc']
其中:
path = os.getcwd()
dir_list = os.listdir(path)
print(dir_list)
与
dir_list = os.listdir()
print(dir_list)
这三个效果一样。
应用:比如我想获取exercise所有文件
1、利用os.walk获取exercise目录下的所有文件夹
2、利用os.path.join获取绝对路径
3、再利用os.listdir获取文件夹下的文件
os.chdir