如何递归地遍历文件夹下的所有文件。如根目录路径为'./Data/',路径下的文件结构如下:
Data/
1/
1.txt
2.txt
3.txt
4.txt
2/
1.txt
2.txt
3.txt
4.txt
3/
1.txt
2.txt
3.txt
4.txt
如何得到所有的.txt的路径,进而实现对所有.txt文件的读取呢
有一个简单的方法就是使用os.walk进行读取。先看下面简单代码
import os
a = list(os.walk('./Data/'))
print(a)
上述代码结果为
[('./Data/', ['1', '2', '3'], []),
('./Data/1', [], ['1.txt', '2.txt', '3.txt', '4.txt']),
('./Data/2', [], ['1.txt', '2.txt', '3.txt', '4.txt']),
('./Data/3', [], ['1.txt', '2.txt', '3.txt', '4.txt'])]
os.walk(root_dir)得到的是一个生成器,我list了一下。从结果可以看出,walk的作用是递归地对根目录文件夹进行解析。每一次会解析出一个元组(当前层的root, 当前层下的文件夹list(如果当前层下没有文件夹,就为空list), 当前层root下的文件(如果没有文件就为空list))
那么如何从上面得到的list解析出每个file的全相对路径呢
可以使用下面的代码
file_path_list = []
for root, sub_folder_path, file_name_list in os.walk('./Data/'):
if root > './Data/':
file_path_list += [root + '/' + file_name for file_name in file_name_list]
print(file_path_list)
结果如下
['./Data/1/1.txt', './Data/1/2.txt', './Data/1/3.txt', './Data/1/4.txt',
'./Data/2/1.txt', './Data/2/2.txt', './Data/2/3.txt', './Data/2/4.txt',
'./Data/3/1.txt', './Data/3/2.txt', './Data/3/3.txt', './Data/3/4.txt']