2015-02-26 3 views
0

Допустим, иерархия каталогов выглядит следующим образом:Как я могу получить все имена файлов в разных каталогах?

  A(root) 
      | 
B---------C--------D 
|   |  | 
fileB.h fileC.png fileD.py 
     fileC1.jpg 
      E 
      | 
     fileE.py 

Как я могу получить доступ ко всем док? Или просто получить путь. Есть ли способ итерации всех?

Что я делаю:

path = sys.path[0] 
for filename_dir in os.listdir(path): 
    filename, ext = os.path.splitext(filename_dir) 
    if ext == '.h': 
     #do something 
    elif ext == '.png' 
     #do something 
    ..... 

Но я знаю listdir может получить доступ только к каталогу, где расположен файл ого моей программы.

+0

Помощь по встроенной функции listdir в модуле POSIX: 'listdir (...) listdir (путь) -> list_of_strings Возвращает список, содержащий имена записей в directory.' <- он принимает аргумент, в котором вы можете указать ему путь. –

+0

btw ['listdir' на самом деле не заботится о том, где находится ваш .py-файл] (https://docs.python.org/2/library/os.html#os.listdir). Причина, по которой вы получаете только файлы, содержащиеся в том же каталоге, что и ваш .py-файл, потому что вы отправляете в качестве аргумента ['sys.path [0]'] (https://docs.python.org/2 /library/sys.html#sys.path) – zehnpaard

+0

Спасибо всем комментариям и ответам. Так много ссылок и информации, которые я должен был изучить. :) –

ответ

3

Это дает только каталоги и файлы в директории, но не рекурсивно:

import os 

for filename in os.listdir(path): 
    print filename 

Если вы хотите перечислить абсолютные пути:

import os 

def listdir_fullpath(d): 
    return [os.path.join(d, f) for f in os.listdir(d)] 

Если вы хотите resursive поиска, это дает вам итератор, который возвращает 3-х кортежей, включая родительский каталог, список каталогов и список файлов на каждой итерации:

for i,j,k in os.walk('.'): 
    print i, j, k 

Например:

import os 

    path = sys.path[0] 

    for dirname, dirnames, filenames in os.walk(path): 
     for subdirname in dirnames: 
      print "FOUND DIRECTORY: ", os.path.join(dirname, subdirname) 
     for filename in filenames: 
      print "FOUND FILE: ", os.path.join(dirname, filename) 
+1

Вау, я не могу поверить, что Python настолько волшебный! –