Поиск путей по непоследовательным числам с помощью glob в Python - PullRequest
2 голосов
/ 09 апреля 2019

Есть ли способ найти имена файлов с номерами, которые не являются последовательными?Более конкретно, я ищу список имен файлов с такими номерами:

path +'*.s201701*.nc'
path +'*.s201801*.nc'
path +'*.s201901*.nc'
path +'*.s201702*.nc'
path +'*.s201802*.nc'
path +'*.s201902*.nc'
path +'*.s201712*.nc'
path +'*.s201812*.nc'
path +'*.s201912*.nc' 

Я могу получить изменения в «2017» к «2019», так как числа являются последовательными, но не «01»,«02», «12», потому что это не так.Это не работает:

glob.glob(path +'*.s201[7-9][01,02,12]*.nc'

И это работает,

glob.glob(path +'*.s201[7-9][0-1][1-2]*.nc'

, но также дает мне файлы в s201*11*.nc, которые я не хочу.Любые советы?

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

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

glob.glob(path +'*.s201[7-9]0[1-2]*.nc') + glob.glob(path +'*.s201[7-9]12*.nc')
0 голосов
/ 09 апреля 2019

Вы можете просто проверить повторяющиеся числа, используя регулярное выражение в форме результатов os.listdir. Я сделал образец файла в том же каталоге, что и скрипт, и он имеет повторяющиеся числа. Использование первого метода возвращает пустой список. Удаление «not» в списке означает, что имя файла нарушает работу.

import os
import re

files = [f for f in os.listdir(path) if not re.search(r'(\d)\1+\b', f)]

print(files)
[]

Удаление «не» для поиска повторяющихся чисел:

files = [f for f in os.listdir(path) if re.search(r'(\d)\1+\b', f)]
print(files)
['s201911.txt']
...