Python正则匹配递归获得给出目录下的特定类型的文件小技巧

需求是酱的:

输入一个目录,这个目录包含检测目录的必备信息但不准确需要获得后加工一下,如给出目录:C:\Program Files\Common Files\DESIGNER,需要检测的目录是:C:\Program Files\Common Files\System,即从给出的目录中获取前面的信息,后面的补上的目录(System)是指定的。从E:\res\tmp目录中检测xml文件,返回xml文件的目录

代码如下: 1 import os 2 import re

 3  pathlist = []
 4  patternxml = r‘.+\.xml$‘
 5
 6  def collectxmlfile(path)
 7     if re.search(r‘\\Program Files\\Common Files‘,path)
 8       path = path.split(‘Common Files‘)[0]
 9       l =  [path ,‘\Common Files\System‘]
10                   path = ‘‘.join(l)
11             pathlistfinal = pathlist
12             for file in os.listdir(path):
13                   file = os.path.join(path,file)
14                   if (os.path.isdir(file) == False):
15                           if (re.match(patternxml,file)):
16                                   pathlistfinal.append(file)
17                            else:pass
18                    else:
19                             collectxmlfile(file)
20              return pathlistfinal21  collectxmlfile(r‘C:\Program Files\Common Files\DESIGNER‘)                 

这里面,为什么第二次递归到collectxmlfile()的时候不会search匹配上呢?

  因为在第9行,Common前面多加了一个‘\‘,这样第二次迭代的时候path中Common前面会有两个‘\\‘,search中的r‘\\Program Files\\Common Files‘只能匹配Common前面的一个反斜杠;但path目录中多反斜杠,对于windows目录的识别是不影响的,os.listdir(path)仍然会正确的识别目录,不会因为多了一个反斜杠找不到目录,如‘C:\Program Files\\Common Files\DESIGNER‘。

不过这种巧妙的方式易读性差一些,我查了好几天才弄明白,比较正常的做法是把目录识别放到迭代函数外面,处理后再传参进迭代的函数。

时间: 2024-10-10 10:30:04

Python正则匹配递归获得给出目录下的特定类型的文件小技巧的相关文章

Linux下环境变量设置技巧,不用/etc/profile而是在/etc/profile.d目录下新建特定的shell文件来设置

区别: 1.两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/profile.d/设置所有用户生效,同样是永久变量,是全局变量. 2./etc/profile.d/比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d/下对应的shell脚本即可,不用像/etc/profile需要改动此文件. 3.需要注意的是,/etc/profile和/etc/profile.d同样是登录(login)级别的变量,当用户重新登录sh

利用python copy目录下所有特定后缀的文件

python 太好用了 这一次我想将子目录先所有jpg和pdf文件都copy出来放到一个文件夹,在网上找了个copy全部文件的代码修改一下就搞定了 import os import shutil source_path = os.path.abspath(r'F:\tool\') target_path = os.path.abspath(r'D:\putout') if not os.path.exists(target_path): os.makedirs(target_path) if o

查询目录下包含特定字符的文件

sudo find /home/q/www/*/conf/server.xml|xargs sudo grep -ri "7777" –l 参考: http://man.linuxde.net/

Python正则匹配字母大小写不敏感在读xml中的应用

需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: 1 if s == 'abc':#s为需要匹配的字符串 2 print '匹配成功\n' 现在的问题是s可能是Abc.ABC等等,所以需要大小写不敏感的匹配,如果把需要匹配的模式的大小写进行罗列,那即使是三个字母的短模式也是很麻烦,查了一下,正则表达式re模块中有个参数flags=re.I,这样就可以大小写不敏感的匹配了,示例如下: 1 import re

java 20 -3 递归之删除特定目录下的特定文件

1 /* 2 需求:删除H:\demo目录下的带内容的文件 3 分析: 4 A:封装该目录 5 B:获取该目录下所有的文件或文件夹的File数组 6 C:遍历该File数组,获取每一个File对象 7 D:判断所遍历的FIle对象 8 是否是文件夹 9 是:返回步骤B 10 不是:判断里面是否有内容 11 有:删除 12 不是:不理 13 B-D设为递归方法: 14 返回类型;void 15 参数列表:File xxx 16 出口:文件里面有内容 17 */ 18 package zl_DiGu

采用递归方式查询某目录下的所有文件

private void DirPathAll(string dirpath) { //本目录下的文件 var paths = Directory.GetFiles(dirpath); foreach (var path in paths) { Application.DoEvents(); listBox1.Items.Add(path); } //所有子目录下的文件 var files = Directory.GetDirectories(dirpath); //获取所有子目录 foreac

解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件

原 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件 原文章链接:https://blog.csdn.net/beauxie/article/details/65448964 原本在Eclipse中好好的MAVEN项目,导入intellij idea中,服务器启动正常,但在调用userMapper接口时,报以下异常: [java] view plain copy org.apache.ibatis.binding.BindingExcepti

删除指定目录下的指定后缀的文件

1 import java.io.*; 2 import javax.swing.*; 3 public class Delete{ 4 public static void main(String[] args)throws Exception{ 5 String target = JOptionPane.showInputDialog(null,"请输入您要清理垃圾的目录:"); 6 File[] fs = new File(target).listFiles(new Filena

解决Linux下Tomcat日志目录下的catalina.log日志文件过大的问题

本文摘自:(http://blog.csdn.net/stevencn76/article/details/6246162) 分类: Java技术专区2011-03-13 12:25 5017人阅读 评论(1) 收藏 举报 tomcatlinux工具任务web 由于Tomcat在默认情况下会将没有经过配置的web应用所产生的日志输出已经其本身的日志内容都输出到这个文件中,那么随着时间的推移,这个文件的尺寸将会越来越大,当需要检查日志内容时间会导致文件难以打开,而且同时tomcat依旧在不断的向文