Рекурсивно ищите имя файла, пока файл не будет найден с использованием python - PullRequest
0 голосов
/ 15 мая 2019

Используя python, Как я могу перебрать каждую строку в файле Test.txt и искать файл Android.mk, если не найден, подняться на уровень каталога и искать снова, пока файл не будет найден?

/home/jenkins/workspace/art/build/apps/XYZ.cpp

По указанному выше пути Android.mk находится в следующем месте

/home/jenkins/workspace/art/build/apps/Android.mk
/home/jenkins/workspace/art/build/Android.mk 

/ home / jenkins / workspace / frameworks/base/rs/ABC.java

По указанному выше пути Android.mk находится в следующем месте

/home/jenkins/workspace/frameworks/Android.mk

Test.txt

/home / jenkins / workspace / art / build / apps / XYZ.cpp /home/jenkins/workspace/frameworks/base/rs/ABC.java

DesireOutput.txt

/home/jenkins/workspace/art/build/apps/Android.mk
/home/jenkins/workspace/frameworks/Android.mk

MyTry

with open('/data/jenkins/workspace/Experiments/Test.txt','r') as f:
    for apps in f.readlines():
        print(apps.strip())
        dirs = os.listdir( apps.strip() )
        for file in dirs:
            #print file
            if file == 'Android.mk':
                print "Android.mk found"
            else:
                os.chdir(apps.strip())
                apps.strip()
                print "Android.mk not found"

1 Ответ

1 голос
/ 15 мая 2019

Ваш сценарий не поднимается до уровня, используя os.chdir('../').Вот скрипт, который реализует это в цикле while.Вы вызывали os.chdir(apps.strip()) каждый цикл вместо os.chdir('../'), чтобы подняться на новый уровень.

with open('/data/jenkins/workspace/Experiments/Test.txt','r') as f:
    for apps in f.readlines():
        os.chdir(apps.strip()) # move into the folder here
        print("Starting search in {}".format(apps.strip()))
        found = False
        while not found:
            dirs = os.listdir(os.getcwd()) # print files in current directory (no argument needed)
            for file in dirs:
                if file == 'Android.mk':
                    print("Android.mk found")
                    found = True
                    break # end our for loop to save computations
            if not found:
                os.chdir("../") # move up a level for the next iteration of while loop 
                print("Android.mk not found...going up a level")

Кроме того, dirs = os.listdir() не должно иметь аргументов, поэтому он получает его для текущей папки (той, в которую мы изменили).В противном случае, независимо от того, где вы находитесь в файловой системе, он вернет один и тот же результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...