2017-02-04 74 views
0

我想在HGG_LGG的子文件夾中搜索文件VSD.Br.XX.O.MR_T1.[some varying number].*。例如,在HGG_LGG的子文件夾中搜索VSD.Br.XX.O.MR_T1.25987.mha。我可以簡單地使用​​3210這樣做,但問題是有像VSD.Br.XX.O.MR_T1c.[some varying number] .*我不想掃描的文件。簡而言之,我希望在T1之後包含點(。))的整個字符串(),然後在該字符串上應用通配符.*。以下是代碼。我試圖用\\轉義點,但沒有工作matches仍然是空的。查找包含點和點後變化字符串的文件

import fnmatch 
import os 

matches = [] 
for root, dirnames, filenames in os.walk('/home/ms/Desktop/Testing/HGG_LGG/'): 
    for filename in fnmatch.filter(filenames, 'VSD.Br.XX.O.MR_T1\\..*'): 
     matches.append(os.path.join(root, filename)) 
+0

與re模塊嘗試指出。 '如果文件名爲[f for f in filenames if re.match(r'VSD.Br.XX.O.MR_T1 \\ .. *',filenames)]' – MYGz

+0

filenames is a list.So using re.match throws type錯誤。 –

+0

立即檢查。我的意思是。 're.match(r'VSD.Br.XX.O.MR_T1 \ .. *',f)'。 'fnmatch()'不會執行正則表達式匹配,它具有有限的通配符用法。 – MYGz

回答

0

這有點棘手。爲了找到VSD.Br.XX.O.MR_T1c.[some varying number] .*這個表格的所有文件,所以倒數第二個點被包含,然後是一些不同的字符串,然後是保存文件的所有擴展名,我們需要使用正則表達式作爲註釋中的指針。

直接使用VSD.Br.XX.O.MR_T1。*確實獲取其他文件。以下是顯示相同的截圖。

enter image description here

以下解決方案爲我工作。

import os 
import re 

matches = [] 

for root, dirnames, filenames in os.walk('/home/ms/Desktop/Testing/HGG_LGG/'): 
    for filename in [f for f in filenames if re.match('VSD.Brain.XX.O.MR_T1\\..*', f)]: 
     matches.append(os.path.join(root, filename)) 

感謝MYGz在評論

相關問題