Как исправить шаблон, который я использую, чтобы получить список файлов в папке со стандартным глобусом библиотеки? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть следующие файлы:

/tmp/test_glob/client.log.71.gz
/tmp/test_glob/client.log.63.gz
/tmp/test_glob/client.log.11
/tmp/test_glob/core_dump.log
/tmp/test_glob/client.log.32
/tmp/test_glob/dm.log
/tmp/test_glob/client.log
/tmp/test_glob/client.log.1
/tmp/test_glob/client.log.64.gz

Я хочу получить все файлы .log, КРОМЕ файлов, заканчивающихся на .gz.Желаемый результат должен быть следующим:

/tmp/test_glob/client.log.11
/tmp/test_glob/core_dump.log
/tmp/test_glob/client.log.32
/tmp/test_glob/dm.log
/tmp/test_glob/client.log
/tmp/test_glob/client.log.1

Я написал этот простой код:

import glob
import os

glob_pattern = u'*.log*'
for log_path in glob.glob(os.path.join('/tmp/test_glob', glob_pattern)):
    print('log_path: ', log_path)

, но он возвращает все файлы из папки / tmp / test_glob /

Я пытался изменить этот шаблон следующим образом:

glob_pattern = u'*.log.[0-9][0-9]'

, но он возвращает только

/tmp/test_glob/client.log.11
/tmp/test_glob/client.log.32

Как исправить этот шаблон?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Попробуйте **/*.log!(*.gz)

Тест с использованием globster.xyz

0 голосов
/ 15 февраля 2019

Это не шаблон шара.Вы не хотите glob.Вы хотите использовать функции модуля re для фильтрации результатов os.listdir.

0 голосов
/ 14 февраля 2019

Используя Pythex (тестер регулярных выражений Python), строка соответствия

glob_pattern = u'.*(\.log)(?!.*(gz)).*'

сработала для вашей цели.

...