摄影:产品经理厨师:产品经理
当我们要在一个文件夹及其子文件夹里面寻找特定类型的文件,我们可能会这样写代码:
- 没有子文件夹时
1. import os 2. all_file = os.listdir('target_folder') 3. target_file = [x for x in all_file if x.endswith('.py')] • 有子文件夹时: 4. import os 5. 6. py_files = [] 7. for root, folder, files in os.walk('.'): 8. for file in files: 9. if file.endswith('.py'): 10. py_files.append(os.path.join(root, file))
print(py_files)
如果当前文件夹的结构如下所示:
. ├── 1.py ├── 2.py ├── sub │ ├── 3.py │ ├── subsub1 │ │ └── 4.py │ └── subsub2 │ └── 5.py └── test.py
那么运行结果如下图所示:
虽然确实满足要求了,但是代码还是有点复杂,而是嵌套三层缩进,代码不够美观。
实际上,要解决遍历文件的问题,只需要使用 Python 自带的 glob
模块即可:
import glob result = glob.glob('**/*.py', recursive=True) print(result)
在使用 glob
模块时,第一个参数指定目标文件的文件名格式,这里可以使用 Linux 中的通配符。如果文件名写为 *.py
,那么就是当前文件夹下面的所有 .py
文件。
如果文件名写为 **/*.py
,那么就是当前第一层子文件夹下面的所有 .py
文件。
如果文件名写为 **/*.py
,并且增加参数 recursive=True
,那么就是递归搜索当前文件夹和所有子文件夹。
运行效果如下图所示:
非常简单就实现了遍历文件夹查找文件的操作。