【问题标题】:Finding the file with pattern including dot and varying string after dot查找包含点和点后不同字符串的模式的文件
【发布时间】: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


【解决方案1】:

这有点棘手。为了找到 VSD.Br.XX.O.MR_T1c.[some varying number] .* 形式的所有文件,因此包含倒数第二个点,然后是一些不同的字符串,然后是保存文件的所有扩展名,我们需要使用 cmets 中指出的正则表达式。

直接使用 VSD.Br.XX.O.MR_T1.* 确实获取了其他文件。这是显示相同的屏幕截图。

以下解决方案对我有用。

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在评论中指出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2014-12-17
    相关资源
    最近更新 更多