Что касается Question1:
Вы спрашиваете о глобусном выражении. Обратите внимание, что выражение, которое вы опубликовали, не обязательно уникально, поэтому оно может соответствовать нескольким каталогам (и файлам). Чтобы получить эти файлы/каталоги, вы можете использовать glob
module
import glob
for result in glob.iglob('/path/to/one/*/dir/and/*/and/*'):
find('myFile.txt', result)
Я полагаю, что вы можете проверить, что result
является каталогом, прежде чем пытаться найти файл в нем ... (os.path.isdir(result)
)
Что касается вопроса 2:
Я думаю, что вы, вероятно, просто хочу знать, если файл, который вы ищете in
файлы, а затем распечатать/yield
полный путь:
def find(filename, path):
for root, dirs, files in os.walk(path):
if filename in files:
print(os.path.join(root, filename))
Нет ничего «непристойного» о написании if x == y
- Это на самом деле довольно распространено. Однако в вашем случае вам действительно не нужно было это делать. Питоническая вещь заключается в том, чтобы использовать встроенные операторы для поиска объекта, который вы хотите в списке, и просто построить вывод, основываясь на том, что вы нашли что-то или нет. Кроме того, я намекал на него выше, но это часто лучше (и более повторное использование), чтобы yield
результаты вместо того, чтобы просто их печати:
def find(filename, path):
for root, dirs, files in os.walk(path):
if filename in files:
yield os.path.join(root, filename)
Теперь вы можете распечатать его в вызывающем (или делать другие вещи с ним ...):
for filename in find(needle, haystack):
print(filename)
Привет @mgilson. Замечательно, что именно я хотел. Большое спасибо ! – Riad