如何仅列出Python中的顶级目录?
时间:2020-03-06 14:48:03 来源:igfitidea点击:
我希望仅列出某个文件夹内的目录。
这意味着我既不想列出文件名,也不需要其他子文件夹。
让我们看看一个例子是否有帮助。在当前目录中,我们有:
>>> os.listdir(os.getcwd()) ['cx_Oracle-doc', 'DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'mod_p ython-wininst.log', 'NEWS.txt', 'pymssql-wininst.log', 'python.exe', 'pythonw.ex e', 'README.txt', 'Removemod_python.exe', 'Removepymssql.exe', 'Scripts', 'tcl', 'Tools', 'w9xpopen.exe']
但是,我不想列出文件名。我也不需要子文件夹,例如\ Lib \ curses。本质上,我想要的东西适用于以下情况:
>>> for root, dirnames, filenames in os.walk('.'): ... print dirnames ... break ... ['cx_Oracle-doc', 'DLLs', 'Doc', 'include', 'Lib', 'libs', 'Scripts', 'tcl', 'Tools']
但是,我想知道是否有一种更简单的方法来获得相同的结果。我得到的印象是仅使用os.walk返回顶级是没有效率的/太多了。
解决方案
directories=[d for d in os.listdir(os.getcwd()) if os.path.isdir(d)]
这样吗
[如果os.path.isdir(path),则os.listdir(os.getcwd())中路径的路径]
[x for x in os.listdir(somedir) if os.path.isdir(os.path.join(somedir, x))]
使用os.path.isdir()过滤结果(并使用os.path.join()获得真实路径):
>>> [ name for name in os.listdir(thedir) if os.path.isdir(os.path.join(thedir, name)) ] ['ctypes', 'distutils', 'encodings', 'lib-tk', 'config', 'idlelib', 'xml', 'bsddb', 'hotshot', 'logging', 'doc', 'test', 'compiler', 'curses', 'site-packages', 'email', 'sqlite3', 'lib-dynload', 'wsgiref', 'plat-linux2', 'plat-mac']
使用os.path.isdir筛选列表以检测目录。
filter(os.path.isdir, os.listdir(os.getcwd()))
请注意,与其做os.listdir(os.getcwd())
,不如做os.listdir(os.path.curdir)
。少调用一个函数,它具有可移植性。
因此,要完成答案,请获取文件夹中的目录列表:
def listdirs(folder): return [d for d in os.listdir(folder) if os.path.isdir(os.path.join(folder, d))]
如果我们希望使用完整路径名,请使用以下功能:
def listdirs(folder): return [ d for d in (os.path.join(folder, d1) for d1 in os.listdir(folder)) if os.path.isdir(d) ]
os.walk('.').next()[1]
或者与Python 3一起使用
next(os.walk('.'))[1]
就像@Andre Soares在下面的评论中说的那样。