воскресенье, 7 февраля 2016 г.

Скрипт поиска файла в директории и вложенных директориях # 2

Как выяснилось, предыдущая версия наотрез оказалась работать в винде. Слеши там, видите ли, "не той системы". А эта, по идее, должна работать везде.


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import bge
import os

def searchFile(startPath, nameFile):
    # результат поиска, по умолчанию "ничего не нашли", он же флаг
    result = False
    # список всех путей к папкам, в которых будем искать
    listPaths = [startPath]
    # просматриваем доступные пути к директориям
    for path in listPaths:
        #print('dir -- ', path) # debug
        # просматриваем содержимое текущей папки
        for ob in os.listdir(path):
            #print('ob -- ', ob, os.path.isfile(os.path.join(path, ob)), os.path.isdir(os.path.join(path, ob))) # debug
            # если файл, тот что нам нужен          
            if ob == nameFile:
                # то изменяем значение флага на путь к файлу
                result = os.path.join(path, ob)
                # и выходим из этого цикла
                break
            # если же файл не тот, что нужен, но является папкой
            elif os.path.isdir(os.path.join(path, ob)):
                # добавляем путь к новой папке в список всех путей для
                # последующего поиска там
                newPath = os.path.join(path, ob)
                listPaths.append(newPath)          
        # если в предыдущем цикле что-то нашли, то выходим и из этого цикла.
        if result != False:
            break
     
    # красиво оформляем фейл поиска      
    if result == False:
        result = 'Извините, по вашему запросу ничего не найдено'
       
    return result


def main():
   
    # путь к папке, с которой мы начнем поиск
    cernelPath = bge.logic.expandPath('//')
   
    # имя искомого файла, понятно, что должно быть своё
    nameFile = 'robot.blend1'

    # осуществляем поиск и сохраняем результат
    search = searchFile(cernelPath, nameFile)
    # выводим результат поиска на экран
    print(search)
    return 0

# бгешный запуск, вместо if __name__ == '__main__'
cont = bge.logic.getCurrentController()
sens = cont.sensors[0]
if sens.positive:
    main()


Комментариев нет:

Отправить комментарий