Python вложенный цикл - PullRequest
       2

Python вложенный цикл

1 голос
/ 25 января 2012

Здравствуйте, я новичок в python и у меня есть вопрос о наилучшем / pythonic способе выполнения вложенных циклов.

Я хочу поместить каждый каталог в массив с вложенным массивом файла, содержащегося вэтот каталог.

Я смотрел на массивы, дикты, наборы и наборы питонов и не уверен, как лучше это сделать

[Примечание. Я просто хочу сделать это для одного уровня, а нерекурсивно через все каталоги]

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

Заранее спасибо

    def getffdirs():

    filedirs = []

    path = os.curdir

    for d in os.listdir(path):      

        if os.path.isdir(d):
            print("Entering " + d)

            curPath = os.path.join(path, d)
            for f in os.listdir(curPath):      

                if os.path.isfile(f):
                    print("file " + f)  
                    filedirs.append(f)     
    return filedirs

Ответы [ 2 ]

1 голос
/ 25 января 2012

РЕДАКТИРОВАТЬ: Если вы хотите словарь,

РЕДАКТИРОВАТЬ 2: Если вы хотите пропустить скрытые каталоги,

from os import listdir, curdir
from os.path import isfile, isdir, join

filedirs = dict((d, [f for f in listdir(d) if isfile(join(d,f))]) 
                for d in listdir(curdir) if isdir(d) and d[0] != '.')

Оригинал:

Эточто ты ищешь?

filedirs = [[f for f in os.listdir(d) if os.path.isfile(os.path.join(d,f))]
            for d in os.listdir('.') if os.path.isdir(d)]
1 голос
/ 25 января 2012

Я бы использовал словарь для этой цели, ключи были бы каталогами и списками значений файлов:

def getffdirs():

  dirs = {}
  path = os.curdir
  for d in os.listdir(path):      

    if os.path.isdir(d):
        print("Entering " + d)
        dirs[d] = [] # add directory with empty list

        curPath = os.path.join(path, d)
        for f in os.listdir(curPath):      

            if os.path.isfile(f):
                print("file " + f)  
                dirs[d].append(f) # add files to appropriate directory
  return dirs

для доступа к данным:

for dir,files in dirs.items(): # notice the call to dirs.items(), thats what was missing.
  print "directory: ",dir
  print "files:"
  for f in files:
    print f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...