一日一技:在 Python 中快速遍历文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一日一技:在 Python 中快速遍历文件相关的知识,希望对你有一定的参考价值。

一日一技:在 Python 中快速遍历文件

技术图片

摄影:产品经理
厨师:产品经理
当我们要在一个文件夹及其子文件夹里面寻找特定类型的文件,我们可能会这样写代码:

  • 没有子文件夹时
    import os
    all_file = os.listdir(‘target_folder‘)
    target_file = [x for x in all_file if x.endswith(‘.py‘)]
  • 有子文件夹时:
    
    import os

py_files = []
for root, folder, files in os.walk(‘.‘):
for file in files:
if file.endswith(‘.py‘):
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

那么运行结果如下图所示:

![](https://s4.51cto.com/images/blog/202012/03/b9dc03f23f5e4db495b9995347f4182d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

虽然确实满足要求了,但是代码还是有点复杂,而是嵌套三层缩进,代码不够美观。

实际上,要解决遍历文件的问题,只需要使用 Python 自带的 glob模块即可:

import glob

result = glob.glob(‘*/.py‘, recursive=True)
print(result)


在使用 glob模块时,第一个参数指定目标文件的文件名格式,这里可以使用 Linux 中的通配符。如果文件名写为 *.py,那么就是当前文件夹下面的所有 .py文件。

如果文件名写为 **/*.py,那么就是当前第一层子文件夹下面的所有 .py文件。

如果文件名写为 **/*.py,并且增加参数 recursive=True,那么就是递归搜索当前文件夹和所有子文件夹。

运行效果如下图所示:

![](https://s4.51cto.com/images/blog/202012/03/677b9b0443e4c9167fc0899c99517a18.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

非常简单就实现了遍历文件夹查找文件的操作。

以上是关于一日一技:在 Python 中快速遍历文件的主要内容,如果未能解决你的问题,请参考以下文章

一日一技:如何从多个Jupyter Notebook中找到需要代码段

一日一技:Python读取包里面的数据文件的三种方法

一日一技:Python 下面最简单的单例模式写法

一日一技:更优雅地在 Python 中写日志

一日一技:在Python中创建临时文件用于记录临时数据

一日一技:在 Python 里面的常用常量字符串