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
pathlist = []
patternxml = r'.+\.xml$' def collectxmlfile(path)
if re.search(r'\\Program Files\\Common Files',path)
path = path.split('Common Files')[0]
l = [path ,'\Common Files\System']
path = ''.join(l)
pathlistfinal = pathlist
for file in os.listdir(path):
file = os.path.join(path,file)
if (os.path.isdir(file) == False):
if (re.match(patternxml,file)):
pathlistfinal.append(file)
else:pass
else:
collectxmlfile(file)
return pathlistfinal
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'。
不过这种巧妙的方式易读性差一些,我查了好几天才弄明白,比较正常的做法是把目录识别放到迭代函数外面,处理后再传参进迭代的函数。
Python正则匹配递归获得给出目录下的特定类型的文件小技巧的更多相关文章
- Python批量删除指定目录下的指定类型的文件
Python作为一种脚本语言.其很适合文件级的各种操作.以下的代码能够批量删除指定目录下的所有特定类型(CSV类型)的文件. import sys, csv , operator import os ...
- C++查找指定目录下所以指定类型的文件
/*************************************************************** 函数名称:FindFile 查找指定目录下指定文件 输入:fileNa ...
- Linux下环境变量设置技巧,不用/etc/profile而是在/etc/profile.d目录下新建特定的shell文件来设置
区别: 1.两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/profile.d/设置所有用户生效,同样是永久变量,是全局变量. 2./etc/prof ...
- Python正则匹配字母大小写不敏感在读xml中的应用
需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...
- python 提取目录中特定类型的文件
python使用‘os’和‘re’模块提取目录中特定类型的文件,这两个模都是安装python自带的,所以不需要安装. 思路: 使用os库lilstdir获取文件夹中的所有文件名,然后带上文件夹路径组合 ...
- java 20 -3 递归之删除特定目录下的特定文件
/* 需求:删除H:\demo目录下的带内容的文件 分析: A:封装该目录 B:获取该目录下所有的文件或文件夹的File数组 C:遍历该File数组,获取每一个File对象 D:判断所遍历的FIle对 ...
- Java基础知识强化之IO流笔记14:递归之输出指定目录下所有java文件绝对路径的案例
1. 需求:输出指定目录下的所以.java结尾文件的绝对路径的案例: 分析: A:封装目录 B:获取该目录下的所有文件和文件夹的File数组 C:遍历这个File数组,得到每一个File对象的 ...
- 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件
原 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件 原文章链接:https://blog.csdn.net/beauxie/article/de ...
- Java基础知识强化之IO流笔记49:IO流练习之 复制指定目录下指定后缀名的文件并修改名称的案例
1. 复制指定目录下指定后缀名的文件并修改名称的案例 需求:复制指定目录下的指定文件,并修改后缀名. • 指定的文件是:.java文件. • 指定的后缀名是:.jad • 指 ...
随机推荐
- RUBY的类封装,继承,多态简单演示
class Person def initialize(name,age=18) @name=name @age=age @motherland="China" end def t ...
- B450配置
电脑型号 联想 B450 笔记本电脑 (扫描时间:2015?5?7?操作系统 Windows 7 旗舰版 32位 SP1 ( DirectX 11 ) 处理器 英特尔 酷睿2 双核 T9800 @ ...
- 【转】Android开发工具--android-studio-bundle-141.2288178
原文网址:http://www.androiddevtools.cn/ AndroidDevTools简介 Android Dev Tools官网地址:www.androiddevtools.cn 收 ...
- 重温Java的类加载机制
原文地址:http://blog.csdn.net/hitxueliang/article/details/19992851 首先简要的说一下类加载器 我们知道,虚拟机的指令存储在以.class为 ...
- Findbugs初探-使用idea获取findbugs插件
/* * 整天忙于无限重复的黑盒测试,不论是写脚本,还是手工测,都难以脱离黑&&灰盒测试,所以忽然间想,大学时期学过的所有课程就这样扔掉吗?不好!既然选择了做测试,那么就要一直坚持下去 ...
- powerdesigner 字段大小写转换\id 自增
转换:tools --> model options-->naming convention name code 自增: 在你所要设为自增型的键上(比如你的id)双击 ,弹出一个Colu ...
- Java中setCharAt()方法介绍
--转载自网络,备忘 这是StringBuffer类里面的一个方法:主要是用来替换的,方法里面有两个参数setCharAt(int index,Char ch),第一个参数是取代的位置 索引从0开始 ...
- C#_Test
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Plus ...
- Linux + Apache + MySql+ Php 配置虚拟主机
win7:------------------------------------------------------------------------ NameVirtualHost *:80&l ...
- jquery中ajax的用法
Jquery中队Ajax操作进行了封装,可分为3层:1.最底层$.ajax(),2.第二层load().$.get().$.post()方法,3.第三层$.getScript()和$.getJSON( ...