Python嵌套循环

Python嵌套循环,python,nested,Python,Nested,您好,我是python新手,有一个关于嵌套循环的最佳/python方式的问题 我想把每个目录放在一个数组中,该数组中包含一个嵌套的文件数组 我一直在研究pythons数组、dict、set和tuple,但不确定最好的方法 [注意,我只想对一个级别执行此操作,而不是递归地遍历所有目录] 目前我有一个函数,可以将子目录的所有文件添加到一个数组中,但现在我也需要返回它们的父文件夹 提前谢谢 def getffdirs(): filedirs = [] path = os.c

您好,我是python新手,有一个关于嵌套循环的最佳/python方式的问题

我想把每个目录放在一个数组中,该数组中包含一个嵌套的文件数组

我一直在研究pythons数组、dict、set和tuple,但不确定最好的方法

[注意,我只想对一个级别执行此操作,而不是递归地遍历所有目录]

目前我有一个函数,可以将子目录的所有文件添加到一个数组中,但现在我也需要返回它们的父文件夹

提前谢谢

    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

为此,我会使用字典,键是目录和文件的值列表:

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

编辑:如果你想要一本字典

编辑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)]

如果您打算将其用于学习以外的任何事情,我建议您一般使用os.walk,我同意,但如果您只需要一个级别呢?嘿@jeff,正如我所说的,我是python新手,我查看了os.walk,但认为对于一个目录级别来说,这可能有点过头了。os.walk会更好吗?@Keet:
os.walk
是唯一正确的解决方案。一个级别或100个级别。@请注意,这并不过分,因为
os.walk
将返回一个
generator对象
(非常酷/高效的python工具),例如
foo=os.walk()
,以获取第一级列表的
generator对象
levelOne=foo.next()
。两行代码。。。不错。谢谢你,你原来的解决方案只返回了我已经返回的文件,但这两种方法都很有趣!我想你是对的,字典是最好的选择。谢谢你。这似乎是我想要的,但我得到了一个“ValueError:太多的值无法解包”错误。有什么想法吗?