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