извлечение последовательности файлов python

Я должен идентифицировать и изолировать номерную последовательность из имен файлов в папке файлов и, при необходимости, идентифицировать непрерывные последовательности. Файлы есть .dpx. Структура именования файлов практически отсутствует, за исключением того, что где-то в имени файла есть порядковый номер и расширение ‘.dpx’. Есть замечательный модуль под названием PySeq, который может сделать всю тяжелую работу, за исключением того, что он просто бомбит с каталогом тысяч, а иногда и сотен тысяч файлов. «Список аргументов слишком велик». У кого-нибудь был опыт работы с изоляцией порядковых номеров и файлами dpx в частности? Каждый файл может иметь размер до 100 МБ. Я работаю над коробкой CentOS, используя Python2.7. Имена файлов могут быть что-то вроде:


test00_take1_00001.dpx


test00_take1_00002.dpx


another_take_ver1-0001_3.dpx


another_take_ver1-0002_3.dpx


(Две непрерывные последовательности)

1 ответ

  1. Это должно сделать именно то, что вы ищете. Это создаст дикт диктов, содержащих начало и конец строк и положить полную строку в список.

    Затем он объединит все списки в один список (вы можете также пропустить эту часть и превратить ее в генератор списков для более высокой эффективности в отношении памяти)

    from collections import defaultdict
    
    input_list = [
        "test00_take1_00001.dpx",
        "test00_take1_00002.dpx",
        "another_take_ver1-0001_3.dpx",
        "another_take_ver1-0002_3.dpx"]
    
    results_dict = defaultdict(lambda: defaultdict(list))
    matches = (re.match(r"(.*?[\W_])\d+([\W_].*)", item) for item in input_list)
    for match in matches:
        results_dict[match.group(1)][match.group(2)].append(match.group(0))
    
    results_list = [d2 for d1 in results_dict.values() for d2 in d1.values()]
    
    >>> results_list
    [['another_take_ver1-0001_3.dpx', 'another_take_ver1-0002_3.dpx'], ['test00_take
    1_00001.dpx', 'test00_take1_00002.dpx']]