2013-09-17 3 views
4

У меня есть структура каталогов, как показано ниже.Поиск каталога для папок и файлов с использованием python

  MainFolder 
      | 
      [lib] 
     / | \ 
     [A] [B] [C] -- file1.so 
     |  |   file2.so 
    file1.so file1.so 
    file2.so file2.so  

Я пытаюсь найти папку «lib» в этой структуре, которая иногда может отсутствовать. Поэтому я использую следующий для проверки наличия «Lib» папки:

if os.path.isdir(apkLocation + apkFolder + '/lib/'): 

Если 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) 

Это дает мне из

    file1.so 
        file2.so 
        file1.so 
        file2.so 
        file1.so 
        file2.so 

Желаемая выход:

  /lib/A/file1.so 
      /lib/A/file2.so 
      /lib/B/file1.so 
      /lib/B/file2.so 
      /lib/C/file1.so 
      /lib/C/file2.so 

, а также папки A, B и C должны быть сохранены отдельно.

+3

'apkLocation + apkFolder + '/ lib /'' - Не добавлять сегменты пути - используйте 'os.path.join (apkLocation, apkFolder, 'lib')' – Eric

+0

Спасибо, что помогли – DesperateLearner

ответ

9

Вы должны присоединиться к текущему каталогу и имя, чтобы получить абсолютный путь к файлу:

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

Это документированный здесь http://docs.python.org/3/library/os.html#os.walk тоже.

+0

Это сработало :) Как получить папку A, B и C вместо того, чтобы играть со строковыми функциями на выходе os.path.join (root, name)? Любые функции пути, которые это делают? – DesperateLearner

+0

Это сделало это os.path.join (root, name) .replace (apkLocation + apkFolder + '/ lib', '') – DesperateLearner

+1

Вы ищете os.path.split() и, возможно, os.path.dirname(). Все это хорошо документировано. –

Смежные вопросы