python 递归遍历文件夹,并打印满足条件的文件路径实例

题目:利用协程来遍历目录下,所有子文件及子文件夹下的文件是否含有某个字段值,并打印满足条件的文件的绝对路径。

#!/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 递归遍历文件夹,并打印满足条件的文件路径实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2017-08-28

Python中文件遍历的两种方法

关于Python的文件遍历,大概有两种方法,一种是较为便利的os.walk(),还有一种是利用os.listdir()递归遍历. 方法一:利用os.walk os.walk可以自顶向下或者自底向上遍历整个文件树,然后返回一个含有3个元素的tuple,(dirpath, dirnames, filenames),要注意的是,os.walk()会返回一个generater,所以调用的时候一定要放到for循环中. 复制代码 代码如下: import osdef walk_dir(dirname): f

Python 遍历子文件和所有子文件夹的代码实例

最近看ECShop到网上找资料,发现好多说明ECShop的文件结构不全面,于是想自己弄个出来.但这是个无聊耗时的工作,自己就写了个Python脚本,可以递归遍历目录下的所有文件和所有子目录,并将结果记录到一个.xml文件中(因为想使用Notepad++的代码折叠功能,所以使用.xml文件). 下面就是Python代码: # -*- coding: cp936 -*- ############################################# # Written By Qian_F

python中遍历文件的3个方法

今天写一个在windows下批量修改文件名的python脚本,用到文件的遍历.用python进行文件遍历有多种方法,这里列举并说明一下. os.path.walk() 这是一个传统的用法. walk(root,callable,args)方法有三个参数:要遍历的目录,回调函数,回调函数的参数(元组形式). 调用的过程是遍历目录下的文件或目录,每遍历一个目录,调用回调函数,并把args作为参数传递给回调函数. 回调函数定义时也有三个参数,比如示例中的func中的三个参数,分别为walk传来的参数.

详解shell 遍历文件夹内所有文件并打印绝对路径

例如你有一个文件夹路径是 /wls,如果想要遍历这个文件夹内的所有文件,并将它们保存到数组中,利用shell你可以这样做 for file in /wls/* do if test -f $file then arr=(${arr[*]} $file) fi done echo ${arr[@]} 这样就可以遍历wls文件夹下的所有文件并把它们的绝对路径存在arr这个数组中,但这还是不够的,因为文件夹中可能会有多个子文件夹,如果只过滤文件会遗漏掉子文件夹中的文件,所以需要扩展上面的方法,如果我们

详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)

Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)具体代码如下: private void SMT(HttpContext context) { string SqlConnection82 = System.Configuration.ConfigurationManager.AppSettings["LocalConnectionString"]; string path = context.Server.MapPath(@"

PHP递归遍历指定文件夹内的文件实现方法

今天早上在地铁上看了关于文件和文件夹的一章,正好最近刚搞懂linux的文件系统,觉得对文件属性的访问跟Shell命令很像,所以想晚上来实践一下. 发现php的文件夹函数好像没有提供遍历文件夹下的所有文件(包括子目录中的文件),于是,就想自己实现一个. 在写的时候发现一些操作文件夹的函数并不是自己想的那样.比如,dirname()根据提供的完整文件路径来取得文件所在的文件夹的路径,但如果你传入的是文件夹,它取的就是它的父文件夹.这点要明白.basename()也是同样的道理,传入文件夹路径取得就是

python压缩文件夹内所有文件为zip文件的方法

本文实例讲述了python压缩文件夹内所有文件为zip文件的方法.分享给大家供大家参考.具体如下: 用这段代码可以用来打包自己的文件夹为zip,我就用这段代码来备份 import zipfile z = zipfile.ZipFile('my-archive.zip', 'w', zipfile.ZIP_DEFLATED) startdir = "/home/johnf" for dirpath, dirnames, filenames in os.walk(startdir): fo

python 实现对文件夹内的文件排序编号

使用时,需更改rootdir, 即文件保存的路径,以及要保存的格式,例如'.jpg' 如果排序前后文件格式一样,建议先随便换个格式,然后再换回来,也就是程序运行两次,第一次随便换个格式,第二次换成想要的格式. #!usr/bin/env python import os import os.path rootdir = "C:\\Users\\IronMan\\Desktop\\launch\\" files = os.listdir(rootdir) b=0 for name in

Python判断一个文件夹内哪些文件是图片的实例

如下所示: def is_img(ext): ext = ext.lower() if ext == '.jpg': return True elif ext == '.png': return True elif ext == '.jpeg': return True elif ext == '.bmp': return True else: return False 调用时 for x in os.listdir(directory): if is_img(osp.splitext(x)[1

Java利用文件输入输出流实现文件夹内所有文件拷贝到另一个文件夹

一.基本目标 使用Java完成如下的操作: 把一个文件夹内的所有文件拷贝的另一的文件夹,例如,在F盘中有a与b两个文件夹: f:/a里面有一堆文件,运行Java程序之后就会全部复制到f:/b,并且完成重命名,在所有文件之前加rename_的前缀,如果里面有文件夹,则文件夹不重命名,里面的文件进行重命名,同样在所有文件之前加rename_的前缀: 二.制作过程 1.首先主函数非常简单,就是调用了上面FileTest类中的copyFolder函数 public class FileCopy { pu

基于linux命令提取文件夹内特定文件路径

最近需要实现自动化搜寻特定文件夹下的特定文件,并且需要分别保存文件路径与文件名.算然使用python的walk能够实现,但是感觉复杂了些.于是想看看linux自带的命令是否能完成这项工作. 环境 需要查找的目录结构如下 . |____test | |____test2.txt | |____test.py | |____test.txt | |____regex.py |____MongoDB | |____.gitignore | |____cnt_fail.py | |____db 目标一:

Linux中查看指定文件夹内各个子文件夹内的文件数量

count脚本 #!/bin/sh numOfArgs=$# if [ $numOfArgs -ne 1 ]; then echo -e "Usage: \nbash $0 dirForCount" exit -1 fi # args ROOTDIR=$1 # core part find $ROOTDIR -maxdepth 1 -type d | sort | while read dir; do count=$(find "$dir" -type f | wc

C#编程实现统计文件夹内文件和隐藏文件的方法示例

本文实例讲述了C#编程实现统计文件夹内文件和隐藏文件的方法.分享给大家供大家参考,具体如下: C#统计文件夹内的文件,包括隐藏文件,显示那个隐藏文件...隐藏的..为什么别人要隐藏呢.. 将程序放在任何文件夹内,点击"当前文件夹",可以获取文件夹所在的路径,也可以直接输入路径,再点击"显示文件",就可以看到效果了,下面的状态栏实现统计功能 using System; using System.Collections.Generic; using System.Co