У меня есть программа, которая принимает на вход список чисел (через запятую), и я должен пройти через файлы, которые начинаются с этих чисел
myprogram.py 1,6,8
Должны просмотреть файлы, которые 1001_filename, 1004_filename, 6001_filename, 8003_filename, 8004_filename
и т. д.,
Один из способов - повторить 3 раза (один раз для 1 *, 6 *, 8 *) и сделать, если
for file_type in file_types:
file.startswith(file_type):
Но как я могу соответствовать любому в списке?
Есть ли регулярное выражение, которое может сделать что-то вроде:
file.startswith(any of file_types):
file_types здесь - это 1,6,8
или что-то в этом роде?
4 ответа
Вы можете использовать glob, чтобы найти все свои файлы:
from glob import glob
path = "path_to/"
files = glob(path+"[1,5,8]*")
Мы сопоставим любой файл, начинающийся с 1
, 5
или 8
в любом каталоге, на который указывает path
.
Для справки, я согласен, что это не необходимый вопрос регулярных выражений, но я люблю регулярные выражения, поэтому вот как это сделать с помощью регулярных выражений
from re import findall, escape
start_list = ['1', '6', '8']
file_list = ['1001_filename', '1004_filename', '0000_filename']
print findall(r'^(%s)' % escape('|'.join(start_list)), file_list)
Кстати, не стоит форматировать регулярные выражения, если это не сделано явно, во всех отношениях плохой ответ. Я просто люблю регулярные выражения
РЕДАКТИРОВАТЬ: Добавлено в re.escape, чтобы не столкнуться с слишком многими проблемами
Вам не нужно регулярное выражение здесь. Я предлагаю использовать простой str.startswith
с {{X1} } принятых префиксов (tuple
prefix
, принятых с Python 2.5) во время перебора ваших файлов. Вот небольшая демонстрация:
>>> start_list = ('1', '6', '8')
>>> file_list = ['1001_filename', '1004_filename', '0000_filename']
>>> for filename in file_list:
... if filename.startswith(start_list):
... print(filename)
...
1001_filename
1004_filename
Вы можете использовать понимание списка на основе ответа Тимгеба.
start_list = ['1', '6', '8']
file_list = ['1001_filename', '1004_filename', '0000_filename']
c = [filename for filename in file_list if any(filename.startswith(start) for start in start_list)]
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.