假设存在下面的目录和文件结构:
/a ----> /b ----> 1.py,2.py
----> /c ----> 3.py , 4.py
----> 5.py
----> 6.py
os.walk()
运行下面的测试代码
import os
for root, dirs, files in os.walk('../a'): # 指向当前的测试文件夹
print(root)
print(dirs)
print(files)
输出结果,我们解析一下输出结果
../a # 当前遍历的根目录
['b', 'c'] # 根目录下的两个子目录b,c
['5.py', '6.py'] # 根目录下的两个子文件
../a\b # 遍历根目录下的子目录b
[] # 子目录b中的子目录
['1.py', '2.py'] # 子目录b中的文件
../a\c # 遍历根目录下的子目录c
[] # 子目录c中的子目录
['3.py', '4.py'] # 子目录c中的文件
os.listdir()
运行如下测试代码
for f in os.listdir('../a'):
print(f)
输出结果
5.py
6.py
b
c
两种方法比较
os.walk将当前目录下的所有子目录及其中的内容,都会遍历到;而os.listdir只会遍历当前目录中所包含的内容。当存在如下的目录级别时
/a ----> /b ------> b1.txt b2.txt
----> /c ------> c1.txt c2.txt
----> /d ------> d1.txt d2.txt
当我们想要将所有的txt文件提取出来,此时使用os.walk是最好的选择,直接将files遍历即可,因为files在其父目录成为根目录时,会将当前文件夹中的所有files遍历出来,即:
import os
for root, dirs, files in os.walk('./a'):
for file in files:
print(file)
#运行结果
b1.txt
b2.txt
c1.txt
c2.txt