利用python正则表达式 遍历目录后取出目录树中的所有特定目录

需求:某一文件存储服务上大致目录结构为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
......上层还有若干目录├─1989pic
......上层还有若干目录│..........├─1989GC20       #这一级的目录就是目标需要得到的
......上层还有若干目录│..........│  └─TS8
......上层还有若干目录│..........│      └─96185X
......上层还有若干目录│..........│          └─000
......上层还有若干目录│..........│              └─012
......上层还有若干目录│..........└─1989GC21      #这一级的目录就是目标需要得到的
......上层还有若干目录│     └─TN3
......上层还有若干目录│          └─85341X
......上层还有若干目录│              └─000
......上层还有若干目录│                  └─001
......上层还有若干目录└─1990pic        #这一级的目录就是目标需要得到的
......上层还有若干目录  ...├─1990gc01     #以下目录未展开
......上层还有若干目录  ...├─1990gc12     #同上
......上层还有若干目录  ├─1990jj01     #同上
......上层还有若干目录  .......├─1990jj02     #同上
......上层还有若干目录  .......├─1990zk01     #同上
......上层还有若干目录  └─1990zk122    #同上


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import  os,re
pattern  =  re. compile (r '\d{4}[a-zA-Z]{2}\d{2,}' #编译个正则表达式
listfiles  =  []
gch  =  []
tempgch  =  []
def  getgch(listfiles):
     for  files  in  listfiles:    #把传入的文件列表逐个取出用'\\'分开后写入list
         global  pattern
         global  gch
         global  tempgch
         =  files.split( '\\' )
         for  in  a:          #将list逐个取出和正则表达式匹配
             match  =  pattern.match(i)
             if  match:
                 tempgch.append(match.group())  #把匹配的结果放到临时list中
     gch = list ( set (tempgch))       #把临时list去重
     return  gch
       
def  walkdir(srcdir):     #遍历目录
     global  listfiles
     srcdir  =  os.path.abspath(srcdir)
     for  parent,dirs,files  in  os.walk(srcdir):
         for  file  in  files:
             infile  =  os.path.join(parent, file )
             listfiles.append(infile)
     #print listfiles
     getgch(listfiles)    #返回文件列表,这里似乎更应该直接返回dirs这个列表即可
srcdir  =  str ( raw_input ( "please input the dirs:\n" ))
walkdir(srcdir)



      本文转自天山三害 51CTO博客,原文链接:http://blog.51cto.com/skybug/1396081,如需转载请自行联系原作者





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值