Чтение файлов по шаблону - PullRequest
       3

Чтение файлов по шаблону

1 голос
/ 07 октября 2019

Я пишу ридер для файлов по их названию. Введите маску регулярного выражения:


def getmatches(datafilelist, regex=None):
    """Takes list of search strings + regex. Returns a list of match objects"""
    if not regex:
        regex = re.compile(
            r"""
            (?P<ftype>[A-Z0-9]{5})      # band type of data file
            _[a-z]+                     # sat id
            _d(?P<date>\d{8})           # acq date
            _t(?P<time>\d{7})           # granule start time UTC
            _e\d+                       # granule end time UTC
            _b(?P<orbit>\d+)            # orbit number
            _c\d+                       # file creation date/time
            _\w+.h5                     # more stuff
            """, re.X)
    return [regex.search(filename) for filename in datafilelist]

Имя файла: SVI01_j01_d20191004_t0717193_e0730075_b00001_c20191004083048126000_ipop_dev.h5

Что не так?

1 Ответ

1 голос
/ 07 октября 2019

В нем просто не хватает нескольких маленьких вещей:

(?P<ftype>[A-Z0-9]{5})_[a-z0-9]+_d(?P<date>\d{8})_t(?P<time>\d{7})_e\d+_b(?P<orbit>\d+)_c\d+_\w+\.h5

Тест

import re

regex = r'(?P<ftype>[A-Z0-9]{5})_[a-z0-9]+_d(?P<date>\d{8})_t(?P<time>\d{7})_e\d+_b(?P<orbit>\d+)_c\d+_\w+\.h5'
string = '''
SVI01_j01_d20191004_t0717193_e0730075_b00001_c20191004083048126000_ipop_dev.h5
'''

print(re.findall(regex, string))

Вывод

[('SVI01', '20191004', '0717193', '00001')]

Если вы хотите упростить /измените / изучите выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...