【发布时间】:2017-02-04 04:36:35
【问题描述】:
我想在 HGG_LGG 的子文件夹中搜索文件 VSD.Br.XX.O.MR_T1.[some varying number].*。例如在 HGG_LGG 的子文件夹中搜索 VSD.Br.XX.O.MR_T1.25987.mha。我可以简单地使用 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))
【问题讨论】:
-
尝试使用 re 模块。
for filename in [f for f in filenames if re.match(r'VSD.Br.XX.O.MR_T1\\..*', filenames)] -
filenames 是一个列表。所以使用 re.match 会引发类型错误。
-
现在检查。我的意思是。
re.match(r'VSD.Br.XX.O.MR_T1\..*', f)。fnmatch()不会进行正则表达式匹配,它的通配符使用有限。
标签: python regex file-handling