Здравствуйте! Если вам необходимо рекурсивно обойти дерево каталогов, то этот пост возможно будет вам полезен. Итак, сразу к делу коду. Создадим файл py.py, добавим ему права на выполнение. В Ubuntu это так:
chmod +x py.py
Затем добавим внутрь это файла следующее:
#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
#Функция ищет все файлы с именем filename во всех подкаталогах каталога catalog
def find_files(catalog, f):
find_files = []
for root, dirs, files in os.walk(catalog):
find_files += [os.path.join(root, name) for name in files if name == f]
return find_files
print find_files(sys.argv[1], sys.argv[2])
Спасибо стандартной библиотеке Python! Без нее срок кода было бы в разы больше, да и читабельность была бы хуже. Итак, что мы сделали? Модуль os.walk() создаем объект-генератор, который выполняет обход дерева каталогов. Что же касается find_files(), то я для сокращения строк кода написал все в однку строчку. Читабельность вроде не пострадала. Здесь мы проверяем равны ли текущее имя файла и аргумент, который мы передали в функцию при вызове.
sys.argv() как вам наверное известно позволяет принимать аргументы из коммандной строки. Вызвать функцию можно так (Ubuntu):
./py.py имя_каталога имя_файла
В ответ она вернет список, содержащий полные пути всех найденных файлов. Можно передавать как относительный путь (папка в том же каталоге, что и файл py.py), так и абсолютные. Решать вам.
Спасибо за внимание!