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 pathlistfinal
21 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'。

       不過這種巧妙的方式易讀性差一些,我查了好幾天才弄明白,比較正常的做法是把目錄識別放到迭代函數外面,處理后再傳參進迭代的函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM