Python-os模块-遍历文件夹下的所有文件

1 问题引入

最近在实现恶意脚本的可视化,需要实现提取文件夹下的所有文件名,实现脚本自动化。

2 文件夹下只有文件

当目标文件夹中只有文件时,使用os模块的listdir()方法即可:该方法可以返回目标路径下的文件和文件夹的名字列表,参数就是目标路径。

1
2
3
4
import os

file_names = os.listdir(r'test')
print(file_names) # ['1.txt', '2.txt', '3.txt']

3 文件夹下有文件和文件夹

当目标文件中既有文件又有文件夹时,我们使用listdir()方法就只能获得第一层子文件或文件夹了,而子文件夹中的内容便获取不到了。

这时候我们需要用到os.walk()方法:传入目标路径即可。该方法可以递归的找出目标路径下的所有文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import os

file_names = os.listdir(r'test')
print(file_names) # ['1.txt', '2.txt', '3.txt', 'sub-dir']

for filepath, dirnames, filenames in os.walk(r'test'):
for filename in filenames:
print(filename)
"""
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
"""

os.walk()方法可以生成三元组,也就是我们代码中的filepathdirnamesfilenames。我们将他们分别打印出来可以看到:其中filepath就是目标路径下所有文件的路径,dirnames是我们目标路径的所有目录名称,filenames则是各个路径下的文件名称列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for filepath, dirnames, filenames in os.walk(r'test'):
print(filepath)
"""
test
test\sub-dir
"""
for filepath, dirnames, filenames in os.walk(r'test'):
print(dirnames)
"""
['sub-dir']
[]
"""
for filepath, dirnames, filenames in os.walk(r'test'):
print(filenames)
"""
['1.txt', '2.txt', '3.txt']
['4.txt', '5.txt', '6.txt']
"""

4 拓展—获得目标路径下的所有文件的绝对路径

遍历目标路径下的各个文件,用os.path.join()方法将文件路径和文件名拼接在一起,就是各个文件的绝对路径了:

1
2
3
4
5
6
7
8
9
10
11
for filepath, dirnames, filenames in os.walk(r'test'):
for filename in filenames:
print(os.path.join(filepath, filename))
"""
test\1.txt
test\2.txt
test\3.txt
test\sub-dir\4.txt
test\sub-dir\5.txt
test\sub-dir\6.txt
"""

X 参考