Почему python glob.glob не дает мне файлы, которые я хочу с регулярным выражением, которое я передал? - PullRequest
0 голосов
/ 14 января 2019

Например:

20190108JPYUSDabced.csv
20190107JPYUSDabced.csv
20190106JPYUSDabced.csv

Когда я ищу первые 2 файла с терминала:

bash: ls /Users/Downloads/201901{08,07}JPYUSDabced.csv
it gives me the first 2 files (exclude 20190106JPYUSDabced.csv)

Когда я делаю в Python:

import glob
glob.glob('/Users/Downloads/201901{08,07}JPYUSDabced.csv')
it gives me []

1 Ответ

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

В соответствии с документами для модуля glob под крышкой glob используется fnmatch.fnmatch. fnmatch документ описывает только следующие шаблоны:

Pattern   |    Meaning
--------- | -----------------------------
*         | matches everything 
?         | matches any single character 
[seq]     | matches any character in seq 
[!seq]    | matches any character not in seq 

Для буквального совпадения заключите метасимволы в скобки. Например, «[?]» Соответствует символу «?».

Попробуйте вместо этого использовать последовательность символов в скобках:

glob.glob('/Users/Downloads/2019010[87]JPYUSDabced.csv')

Использование os.walk

Предполагая, что вы ищете для поиска определенных диапазонов дат, вам может потребоваться использовать os.walk с re регулярными выражениями, чтобы получить более сложный шаблон, который вы находясь в поиске.

Предостережение: os.walk рекурсивно проходит через каждого режиссера из стартовой позиции, что может быть не тем, что вы хотите.

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

Регулярное выражение соответствует дате 20181208 или дате 20190107, но должно содержать идентификатор JPYUSDabced.csv.

regex = re.compile("(?:(?:20181208)|(?:20190107))JPYUSDabced.csv")

files = []
for dirpath, dirnames, filenames in os.walk('/Users/Downloads'):
    for f in filenames:
        if regex.match(f):
            files.append(os.path.join(dirpath, f))
print(files)
# ['/Users/Downloads/20190107JPYUSDabced.csv', '/Users/Downloads/20181208JPYUSDabced.csv']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...