首页 > 解决方案 > 递归搜索文件名,直到使用 python 找到文件

问题描述

使用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

测试.txt

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

欲望输出.txt

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

我的尝试

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"

标签: pythonloopssearch

解决方案


您的脚本没有使用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()应该没有参数,所以它为当前文件夹(我们更改为的文件夹)获取它。否则,无论您在文件系统中的哪个位置,它都会返回相同的结果。


推荐阅读