使用python在目录中搜索文件夹和文件

Des*_*ner 6 python directory operating-system path

我有一个类似下面给出的目录结构.

         MainFolder 
             |
           [lib] 
         /   |   \
       [A]  [B]  [C] -- file1.so 
        |     |         file2.so
   file1.so   file1.so
   file2.so   file2.so    
Run Code Online (Sandbox Code Playgroud)

我正在尝试在该结构中寻找可能不存在的'lib'文件夹.所以我使用以下内容来检查'lib'文件夹是否存在:

   if os.path.isdir(apkLocation + apkFolder + '/lib/'):
Run Code Online (Sandbox Code Playgroud)

如果存在lib文件夹,那么我继续搜索'lib'中的文件夹.我必须存储文件夹A,B和C的名称,并查找以".so"结尾的文件,其路径应存储为/lib/A/file1.so,/lib/A/file2.so等等上.

 if os.path.isdir(apkLocation + apkFolder + '/lib/'):
   for root, dirs, files in os.walk(apkLocation + apkFolder):
            for name in files:
                if name.endswith(("lib", ".so")):
                    print os.path.abspath(name) 
Run Code Online (Sandbox Code Playgroud)

这让我出局了

                  file1.so
                  file2.so
                  file1.so
                  file2.so
                  file1.so
                  file2.so
Run Code Online (Sandbox Code Playgroud)

期望的输出:

           /lib/A/file1.so
           /lib/A/file2.so
           /lib/B/file1.so
           /lib/B/file2.so
           /lib/C/file1.so
           /lib/C/file2.so
Run Code Online (Sandbox Code Playgroud)

文件夹A,B和C也要单独保存.

小智 12

您必须加入当前目录和名称以获取文件的绝对路径:

for root, dirs, files in os.walk(apkLocation + apkFolder):
    for name in files:
        if name.endswith(("lib", ".so")):
            os.path.join(root, name)
Run Code Online (Sandbox Code Playgroud)

这里也记录了http://docs.python.org/3/library/os.html#os.walk.