2017-02-04 6 views
0

Я хочу, чтобы искать файлы VSD.Br.XX.O.MR_T1.[some varying number].* в папках, вложенных HGG_LGG.For пример поиска для VSD.Br.XX.O.MR_T1.25987.mha в папках, вложенных HGG_LGG.I могли бы просто использовать VSD.Br.XX.O.MR_T1.* для это проблема, но есть файлы вроде 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

Попробуйте с модулем повторной. 'для имени файла в [f для f в именах файлов, если re.match (r'VSD.Br.XX.O.MR_T1 \\ .. * ', имена файлов)]' – MYGz

+0

имена файлов - это список. Так используя тип re.match throws ошибка. –

+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 за указание в комментарии