Как проверить, что файл начинается с определенного формата перфикса?

У меня есть список файлов с такими именами.

["TYBN-220422-257172171.txt", "TYBN-120522-257172174.txt", "TYBN-320422-657172171.txt", "TYBN-220622-237172174.txt", "TYBN-FRTRE-FFF.txt",....]

Я хочу получать только файлы такого формата TYBN-220422-257172171.txt

valid = "TYBN-{}-{}".format(numericvalue, numericvalue) Я хочу, чтобы этот тип файлов был только в списке.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
48
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это, вероятно, проще всего сделать с помощью регулярного выражения, чтобы соответствовать желаемому формату, т.е.

TYBN-\d+-\d+\.txt$

который ищет имя, начинающееся с символов TYBN-, за которыми следует одна или несколько цифр (\d+), -, еще несколько цифр и затем заканчивается .txt.

Обратите внимание, что при использовании re.match (как в приведенном ниже коде) совпадения автоматически привязываются к началу строки, поэтому в регулярном выражении не требуется начальный ^ (привязка к началу строки).

В питоне:

import re
filelist = ["TYBN-220422-257172171.txt",
            "TYBN-120522-257172174.txt",
            "TYBN-320422-657172171.txt",
            "TYBN-220622-237172174.txt",
            "TYBN-FRTRE-FFF.txt"
           ]
regex = re.compile(r'TYBN-\d+-\d+\.txt$')
valid = [file for file in filelist if regex.match(file)]

Выход:

[
 'TYBN-220422-257172171.txt',
 'TYBN-120522-257172174.txt',
 'TYBN-320422-657172171.txt',
 'TYBN-220622-237172174.txt'
]

Попробуй это.

lst = ["TYBN-220422-257172171.txt",  "TYBN-120522-257172174.txt", "TYBN-320422-657172171.txt", "TYBN-220622-237172174.txt", "TYBN-FRTRE-FFF.txt"]

valid_format = ['TYBN',True,True] # here true for digits
valid = []

for a in lst:
    l = a.replace('.txt','').split('-')
    if l[0] == valid_format[0]:
        if [i.isdigit() for i in l[1:]] == valid_format[1:]:
                valid.append(a)

print(valid)

ВЫХОД:

['TYBN-220422-257172171.txt',
 'TYBN-120522-257172174.txt',
 'TYBN-320422-657172171.txt',
 'TYBN-220622-237172174.txt']

Модуль ре был изобретен, чтобы устранить необходимость в таком коде.

Lancelot du Lac 07.05.2022 09:45
Ответ принят как подходящий

Объяснение регулярного выражения:

  • ^ начало строки
  • $ конец строки
  • \ д соответствует всем числам. Эквивалент [0-9]
  • + одно или несколько выражений
import re

files = ["TYBN-220422-257172171.txt", "TYBN-120522-257172174.txt"]

pattern = re.compile("^TYBN-\d+-\d+\.txt$")

for f in files:
    if pattern.match(f):
        print(f + " matched naming convention.")

Спасибо за подробный ответ. Еще одна просьба, если я хочу добавить еще одно условие при сопоставлении. здесь -220422-257172171 длина должна быть 6 и 9 соответственно. как я могу сделать это здесь?

D_P 07.05.2022 12:05
re.compile("^TYBN-\d{6}-\d{9}\.txt$") ? Я думаю, это сработает.
D_P 07.05.2022 12:20

@D_P, это сработает, как я сказал в своем ответе, вам не нужно начальное ^, поскольку re.match все равно всегда привязывает совпадения к началу строки. Так что просто TYBN-\d{6}-\d{9}\.txt$

Nick 07.05.2022 14:00

Другие вопросы по теме