python正则表达式来收集具有相同头部的文件

2024-05-17 18:33:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个函数,返回包含相同起始名称的图像列表。这是工作目录的截图。你知道吗

enter image description here

def get_image_sequence(filepath):
    '''
    Description:
        Returns list of images contained in the same seq
    Args:
        filepath(str): Path to a frame in the sequence
    '''
    seq = []

    if not os.path.isfile(filepath):
            return []

    basename = os.path.basename(filepath).split('.')[0]
    directory = os.path.dirname(filepath)

    matcher = re.compile(r'^(?P<header>[\w\-.]*(?:[.]|[_]))*(?P<padding>\d+)(?P<tail>[.][A-Za-z]{1,4}$)')

    for file in sorted(os.listdir(directory)):
        reMatch = matcher.match(file)
        if reMatch:
            print reMatch.group('header'), reMatch.group('padding'), reMatch.group('tail') 

    return seq

当我运行脚本试图收集与这个名为TEST\u 0102\u 000\u 010\u fx\u playblast\u v08.0018.jpg的文件序列相关联的图像时,我立即得到以下输出:

TEST_ 0102 .jpg
TEST_0102_000_010_fx_playblast_v08. 0010 .jpg
TEST_0102_000_010_fx_playblast_v08. 0011 .jpg
TEST_0102_000_010_fx_playblast_v08. 0012 .jpg
TEST_0102_000_010_fx_playblast_v08. 0013 .jpg
TEST_0102_000_010_fx_playblast_v08. 0014 .jpg
TEST_0102_000_010_fx_playblast_v08. 0015 .jpg
TEST_0102_000_010_fx_playblast_v08. 0016 .jpg
TEST_0102_000_010_fx_playblast_v08. 0017 .jpg
TEST_0102_000_010_fx_test_v08. 0028 .jpg
TEST_0102_000_010_fx_test_v08. 0029 .jpg
TEST_0102_000_010_fx_test_v08. 0030 .jpg

我想知道是否有一种方法可以插入re,基本名称,即TEST\u 0102\u 000\u 010\u fx\u playblast\u v08。这样,只有当前缀与每个文件匹配时,“重新匹配”才会测试True,然后返回以下结果:

TEST_0102_000_010_fx_playblast_v08. 0010 .jpg
TEST_0102_000_010_fx_playblast_v08. 0011 .jpg
TEST_0102_000_010_fx_playblast_v08. 0012 .jpg
TEST_0102_000_010_fx_playblast_v08. 0013 .jpg
TEST_0102_000_010_fx_playblast_v08. 0014 .jpg
TEST_0102_000_010_fx_playblast_v08. 0015 .jpg
TEST_0102_000_010_fx_playblast_v08. 0016 .jpg
TEST_0102_000_010_fx_playblast_v08. 0017 .jpg

Tags: pathintest图像名称osgroupseq
1条回答
网友
1楼 · 发布于 2024-05-17 18:33:21

这就是你想要的:

matcher = re.compile(r'^(?P<header>' + basename + ')\.(?P<padding>\d+)(?P<tail>[.][A-Za-z]{3})$')

Demo

请注意,我还稍微修改了padding和tail regex。你知道吗

相关问题 更多 >