如何在Python中只列出顶级目录?

2024-06-07 09:51:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想列出某个文件夹中的目录。 这意味着我不希望列出文件名,也不希望列出其他子文件夹。

让我们看看一个例子是否有用。在当前目录中,我们有:

>>> 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返回顶级是低效的/太多了。


Tags: txt文件夹logdocincludeos文件名lib
3条回答

使用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']

操作系统漫游

^{}^{}项函数一起使用:

next(os.walk('.'))[1]

对于Python<;=2.5使用:

os.walk('.').next()[1]

工作原理

os.walk是生成器,调用next将获得3元组形式的第一个结果(dirpath、dirnames、filenames)。因此,[1]索引只返回该元组中的dirnames

使用os.path.isdir筛选列表以检测目录。

filter(os.path.isdir, os.listdir(os.getcwd()))

相关问题 更多 >

    热门问题