os.walk主要是python中用于遍历输出目录名以及文件名的遍历器
格式为:
os.walk(‘文件路径’,topdown=True)
其中topdown为可选参数,默认情况下是True,当它为False时,它会自底向上遍历,当它是True时会自顶向下遍历,下面看一下例子,文件结构如下:
输入代码:
for root,dirs,files in os.walk('D:\\1',topdown=True):
print(root)
print(dirs)
print(files)
print('\n')
输出结果如下:
D:\1
[‘A’, ‘B’]
[‘test.doc’, ‘test.txt’]
D:\1\A
[]
[‘test.txt’]
D:\1\B
[]
[]
其中root是当前文件夹路径,dirs是当前文件夹下的文件夹路径,files是当前文件夹下的文件路径,如果参数topdown为False的话,输出结果如下:
D:\1\A
[]
[‘test.txt’]
D:\1\B
[]
[]
D:\1
[‘A’, ‘B’]
[‘test.doc’, ‘test.txt’]
可以看出自底向上遍历时,会优先比遍历最底层的那个文件夹,依次向上
如果想要输出路径下所有文件名称的话代码如下:
for root,dirs,files in os.walk('D:\\1',topdown=False):
for i in files:
print(os.path.join(root, i))
输出路径下所有文件夹名称:
for root,dirs,files in os.walk('D:\\1',topdown=False):
for i in dirs:
print(os.path.join(root, i))
另外需要注意的是
1、输入路径参数时需要注意转义字符\的问题
如os.walk(‘D:\1’)那么作为字符串输入的文件路径里的\会被当成转义字符最终输出可能是空列表或者报错:
SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape
解决方法如下:
os.walk(‘D:\1’)
os.walk(r’D:\1’) 声明不需要转义
os.walk(‘D:/1’) 使用linux路径写法
2、所获得的root,dirs,files并不是字符串类型,如果需要进行字符串相关操作需要转换类型str(root)
知道os.walk的用法瞬间就感觉os.listdir不香啦