往往会需要遍历目录,文件夹下的文件。需要清楚脉络
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
用于通过在目录树中游走输出在目录中的文件名,向上或向下
import os
for root, dirs, files in os.walk(".", topdown=False):
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
有下面这样的文件路径
for root,dirs,files in os.walk(fileDir):
print(root)
print(dirs)
print(files)
输出
aaa
['4']
['1.txt','2.txt','3.txt']
aaa\4
[]
['5.txt','6.txt']
for a in os.walk(fileDir):
print(a[0])
print(a[1])
print(a[2])
输出
aaa
['4']
['1.txt','2.txt','3.txt']
aaa\4
[]
['5.txt','6.txt']
for a in os.walk('F:/a'):
print(a[2])
['1.txt']
['3.txt', '4.txt']
此方法的a[2]就是所有的file
for root,dirs,files in os.walk(fileDir):
for file in files:
print(os.path.join(root,file))
输出
aaa\1.txt
aaa\2.txt
aaa\3.txt
aaa\4\5.txt
aaa\4\6.txt
此方法通过遍历文件可以得到所有的文件
注意,当我想要所有的文件,不管在几级目录下,通过遍历就可以得到所有文件像图片,文档之类。
all = []
for a in os.walk('F:/a'):
for i in a[2]:
all.append(os.path.join(a[0],i))
print(all)
['F:/a\\1.txt', 'F:/a\\2\\3.txt', 'F:/a\\2\\4.txt', 'F:/a\\222\\21.txt', 'F:/a\\2222\\21.txt']
那么当想要得到所有二级目录 ,前提在各个文件夹下没有文件夹了
dir = [a[0] for a in os.walk('F:/a')]
print(dir)
is_root_dir = True
finl_dir = []
for sub_dir in dir:
if is_root_dir:
is_root_dir = False
continue
finl_dir.append(sub_dir)
print(finl_dir)
['F:/a', 'F:/a\\2', 'F:/a\\22', 'F:/a\\222', 'F:/a\\2222']
['F:/a\\2', 'F:/a\\22', 'F:/a\\222', 'F:/a\\2222']
dir3 = [a[1] for a in os.walk('F:/a')]
print(dir3)
print(dirs[0])
[['2', '22', '222', '2222'], [], [], [], []]
['2', '22', '222', '2222']
file = [a[2] for a in os.walk('F:/a')]
print(file)
[['1.txt'], ['3.txt', '4.txt'], [], ['21.txt'], ['21.txt']]
返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径