Python 协程递归遍历文件夹并打印匹配文件路径

周予安
周予安
发布时间:2026-10-13| 2人浏览过
原创

本文介绍利用 Python 协程实现递归遍历文件夹并查找包含特定字段值的文件路径。通过装饰器简化生成器初始化,结合 os.walk 遍历子目录,逐层传递文件句柄与内容,最终打印满足条件的绝对路径。该方法结构清晰,适用于长期稳定的系统场景,但不具备高扩展性。

题目要求:利用协程机制遍历指定目录下的所有子文件及子文件夹,检查文件内容是否包含某个特定字段值,并打印出所有满足该条件的文件的绝对路径。

#!/user/bin/env python
# -*- coding:utf-8 -*-

#grep -rl "python" D:\devtools\workspace\python\aaa

import os

def init(func):
 def wrapper(*args,**kwargs):
  res=func(*args,**kwargs)
  res.send(None)
  return res
 return wrapper

@init
def search(target):
 '找到文件的绝对路径'
 while True:
  dir_name=yield
  g=os.walk(dir_name)
  for i in g:
   for j in i[-1]:
    file_path="%s\\%s"%(i[0],j)
    target.send(file_path)
@init
def get_file_handle(target):
 '获取文件句柄'
 while True:
  file_path=yield
  with open(file_path) as f:
   target.send((file_path,f))

@init
def cat_file(target):
 '读取文件'
 while True:
  file_path,f=yield
  for line in f:
   target.send((file_path,line))

@init
def printer(pattern):
 '打印满足过滤条件的文件'
 s=set()
 while True:
  file_path,line=yield
  if pattern in line:
   if file_path not in s:
    print(file_path)
   s.add(file_path)


g=search(get_file_handle(cat_file(printer("python"))))
g.send("D:\\devtools\\workspace\\python\\aaa")

引入装饰器后,无需在每次调用时手动执行 .send(None),形参 target 直接接收一个已初始化的生成器对象。

整体编程采用面向过程的开发思路。

面向过程方法要求预先设计好完整的处理流程。

其优势在于:a. 体系结构更加清晰;b. 有效简化了程序的复杂度。

其局限性在于:不具备良好的可扩展性(内部耦合度过高)。

典型应用场景:适用于那些长期运行且需求变化较小的软件系统,例如底层系统软件。

以上关于 Python 递归遍历文件夹并打印满足条件文件路径的实例即为全部内容分享,希望能为大家提供有益参考,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。