2016-06-23 2 views
0

Указанные два параметра, 123 и abc, я могу однозначно идентифицировать каталог формы:Эффективный способ поиска определенного каталога на основе входных параметров?

\path\to\unique_123\directory_abc 

Однако, «уникальный» и «каталог» будет варьироваться в зависимости от папки к папке. Я хотел бы создать такую ​​функцию, чтобы func(123, abc) вернул \path\to\unique_123\directory_abc.

Есть ли что-то более эффективное, чем использование os.walk, чтобы выполнить это?

ответ

2

Возможно, вы хотите:

import glob 

matches = glob.glob('**/*_%s/*_%s' % ('123', 'abc'), recursive=True) 
assert len(matches) == 1 
print(matches[0]) 

Но избежать recursive, если вы на самом деле не нужно, она часто будет очень медленно! Если вы действительно do это нужно, я бы, вероятно, выложил find(1), который лучше подходит для такого рода вещей.

+0

Это интересная идея. Если «123» уникально, его каталог и «abc» уникальны в его каталоге, имеет ли значение, если я использую 'recursive = True' или нет? – codycrossley

+1

@codycrossley Это зависит от того, является ли ваш '/ path/to' постоянным или нет. Кроме того, вы могли бы подтвердить уникальность ранее, выполнив два отдельных вызова 'glob' ... – o11c

+0

Благодарим за разъяснение! '/ path/to' является постоянным. Я изучу отдельный вариант вызовов glob! Ваш вход оценен! – codycrossley

-1

Если вы хотите увидеть, какие каталоги находятся в папке, используйте:

os.listdir("/path/to/folder") 

Используя это, вы можете получить имена вложенных папок.

Если вы видите уже существующую папку unique_123, вы можете отделить цифры от конца имени папки с помощью `rstrip (« 1234567890 ») в строке, предполагая, что имя папки заканчивается цифрами, и вам нужно для их замены.

+0

Вы не разместили достаточно подробностей в своем вопросе, чтобы я мог точно ответить, но это может помочь вам. –

Смежные вопросы