Регулярное выражение, glob, Python

У меня есть папка, содержащая много файлов. Есть группа, содержащая pc_0.txt,pc_1.txt,...,pc_699.txt. Я хочу выбрать все файлы между pc_200 -> и pc_699.txt

Как?

for filename in glob.glob("pc*.txt"):
    global_list.append(filename)

person user7198142    schedule 09.12.2016    source источник
comment
Примечание: если вы просто добавляете каждое значение в глобальный список, пропустите явный цикл и просто выполните: global_list.extend(glob.glob("pc*.txt")) (или любой другой шаблон глобуса, на котором вы остановились); позволить Python выполнять работу сразу массово — это быстрее и чище, чем ненужный явный цикл.   -  person ShadowRanger    schedule 09.12.2016


Ответы (1)


Для этого конкретного случая glob уже поддерживает то, что вам нужно (см. fnmatch документы для групповые подстановочные знаки). Вы можете просто сделать:

for filename in glob.glob("pc[23456]??.txt"):

Если вам нужно уточнить, что два завершающих символа являются числами (в некоторых файлах могут быть нечисловые символы), вы можете заменить ? на [0123456789], но в остальном я нахожу ? немного менее отвлекающим.

В более сложном сценарии вам, возможно, придется прибегнуть к регулярным выражениям, и вы можете сделать это здесь с помощью:

import re

for filename in filter(re.compile(r'^pc_[2-6]\d\d\.txt$').match, os.listdir('.')):

но, учитывая, что подстановочные знаки в стиле глобуса работают достаточно хорошо, вам пока не нужно ломать большие пушки.

person ShadowRanger    schedule 09.12.2016