2016-06-09 5 views
0

Иам используя инструкцию:Как сформировать glob, который работает для дикого символа или точного совпадения?

input_stuff = '1,2,3' 
glob(folder+'['+ input_stuff + ']'+'*') 

список файлов, которые начинаются с 1,2 или 3, а это список файлов, такие как 1-мой-файл, 2-мой-файл, 3-мой-файл , Это не работает, если имена точный файл приведены

input_stuff = '1-my-file, 2-my-file, 3-my-file' 
glob(folder+'['+ input_stuff + ']'+'*') 

Ошибка является: sre_constants.error: bad character range

хуже:

input_stuff = '1-my-' 
glob(folder+'['+ input_stuff + ']'+'*') 

Он печатает все в папку, например, 3-мой-файлов и т.д. .,

Есть ли инструкция glob, которая будет печатать файлы для обоих

input_stuff = '1,2,3' 

или

input_stuff = '1-my-file, 2-my-file, 3-my-file' 

?

ответ

1

Выражение Glob в скобках представляет собой набор символов, а не список строк. Вы первый expresion input_stuff = '1,2,3' эквивалентны '123,' и также будут совпадать с именем, начинающимся с запятой.
Ваше второе выражение содержит '-', которое используется для обозначения диапазонов символов, таких как '0-9A-F', следовательно, вы получите ошибку.

Лучше всего удалить глобус, раскол input_stuff и использовать listdir.

import re, os 

input_stuff = '1-my-file, 2-my-file, 3-my-file' 
folder = '.' 

prefixes = re.split(r'\s*,\s*', input_stuff) #split on commas with optional spaces 
prefixes = tuple(prefixes) # startswith doesn't work with list 
file_names = os.listdir(folder) 
filtered_names = [os.path.join(folder, fname) for fname in file_names 
        if file_name.startswith(prefixes)] 
+0

Я имел в виду, но ваше объяснение убедило меня. – Victor

0

Вы можете использовать следующее:

input_stuff = '1,2,3' 
glob(folder+'['+input_stuff+']-my-file*') 

EDIT: Так как вы сказали в своем комментарии, что вы не можете жёстко "-my-файл", вы можете сделать что-то вроде:

input_stuff = '1,2,3' 
name = "-my-file" 
print glob.glob(folder+'['+input_stuff+']'+name+'*') 

, а затем просто измените переменную «имя», когда вам нужно.

+0

Я не могу жестко задавать: '-my-file', это переменная. – Victor

+0

@Victor Вы не упомянули об этом в своем вопросе, но я обновил свой ответ, чтобы отразить это. – Natsukane

+0

Я не могу так использовать, потому что пользователь может ввести: input_stuff = '1,2,3' или input_stuff = '1-my-file, 1-my-stuff, 3-my-file' или любую такую ​​комбинацию и один glob заявление должно работать – Victor