获取当前目录中所有子目录的列表

有没有办法返回Python中当前目录中的所有子目录的列表?

我知道你可以用文件做到这一点,但我需要获取目录列表。

你的意思是直接的子目录,或者每个目录在树下?

无论哪种方式,你可以使用os.walk来做到这一点:

 os.walk(directory) 

会为每个子目录产生一个元组。 三元组中的第一个条目是一个目录名称,所以

 [x[0] for x in os.walk(directory)] 

应recursion地给你所有的子目录。

请注意,元组中的第二个条目是第一个条目中子条目的子目录列表,因此您可以使用它,但不太可能节省很多。

但是,您可以使用它只是为了给你直接的子目录:

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

或者使用os.listdiros.path.isdir查看已发布的其他解决scheme,包括“ 如何获取Python中的所有直接子目录 ”。

 import os d = '.' [os.path.join(d, o) for o in os.listdir(d) if os.path.isdir(os.path.join(d,o))] 

你可以使用glob.glob

 from glob import glob glob("/path/to/directory/*/") 

不要忘记尾随/后面的*

如果您需要recursion解决scheme来查找子目录中的所有子目录,请使用之前提出的walk。

如果您只需要当前目录的子目录,请将os.listdiros.path.isdir结合使用

我更喜欢使用filter( https://docs.python.org/2/library/functions.html#filter ),但这只是一个口味问题。

 d='.' filter(lambda x: os.path.isdir(os.path.join(d, x)), os.listdir(d)) 

用python-os-walk来实现这个。 ( http://www.pythonforbeginners.com/code-snippets-source-code/python-os-walk/

 import os print "root prints out directories only from what you specified" print "dirs prints out sub-directories from root" print "files prints out all files from root and directories" print "*" * 20 for root, dirs, files in os.walk("/var/log"): print root print dirs print files 

比上面更好,因为你不需要几个os.path.join(),你将直接得到完整的path(如果你愿意),你可以在Python 3.5+

 subfolders = [f.path for f in os.scandir(folder) if f.is_dir() ] 

这将提供完整的path到子目录。 如果您只想使用f.name而不是f.path的子目录的名称

https://docs.python.org/3/library/os.html#os.scandir

您可以使用os.listdir(path)获取Python 2.7中的子目录(和文件)

 import os os.listdir(path) # list of subdirectories and files 

感谢提示,伙计们。 我遇到了软链接(无限recursion)作为目录返回的问题。 软链接? 我们不希望没有臭的软链接! 所以…

这只呈现了dirs,而不是softlinks:

 >>> import os >>> inf = os.walk('.') >>> [x[0] for x in inf] ['.', './iamadir'] 

由于我偶然发现了使用Python 3.4和Windows UNCpath的这个问题,下面是这个环境的一个变种:

 from pathlib import WindowsPath def SubDirPath (d): return [f for f in d.iterdir() if f.is_dir()] subdirs = SubDirPath(WindowsPath(r'\\file01.acme.local\home$')) print(subdirs) 

Pathlib是Python 3.4中的新增function,使得在不同操作系统下处理path变得更加简单: https ://docs.python.org/3.4/library/pathlib.html

基于Eli Bendersky的解决scheme,请使用以下示例:

 import os test_directory = <your_directory> for child in os.listdir(test_directory): test_path = os.path.join(test_directory, child) if os.path.isdir(test_path): print test_path # Do stuff to the directory "test_path" 

其中<your_directory>是要穿过的目录的path。

这里有几个基于@Blair康拉德例子的简单函数 –

 import os def get_subdirs(dir): "Get a list of immediate subdirectories" return next(os.walk(dir))[1] def get_subfiles(dir): "Get a list of immediate subfiles" return next(os.walk(dir))[2] 

以完整的path和path为“。”,“..”,“\”,“.. \ .. \子文件夹”等

 import os, pprint pprint.pprint([os.path.join(os.path.abspath(path), x[0]) for x in os.walk(os.path.abspath(path))]) 

虽然这个问题很久以前就回答了。 我想推荐使用pathlib模块,因为这是在Windows和Unix操作系统上工作的强大方法。

所以要获取包含子目录的特定目录中的所有path:

 from pathlib import Path paths = list(Path('myhomefolder', 'folder').glob('**/*.txt')) # all sorts of operations file = paths[0] file.name file.stem file.parent file.suffix 

等等

这个答案似乎已经不存在了。

 directories = [ x for x in os.listdir('.') if os.path.isdir(x) ] 

仅列出目录

 print "\nWe are listing out only the directories in current directory -" directories_in_curdir = filter(os.path.isdir, os.listdir(os.curdir)) print directories_in_curdir 

仅列出当前目录中的文件

 files = filter(os.path.isfile, os.listdir(os.curdir)) print "\nTHe following are the list of all files in the curent directory -" print files 

Python 3.4将pathlib模块引入标准库,提供了一种面向对象的方法来处理文件系统path:

 from pathlib import Path p = Path('./') # List comprehension [f for f in p.iterdir() if f.is_dir()] # The trailing slash to glob indicated directories # This will also include the current directory '.' list(p.glob('**/')) 

Pathlib也可以通过PyPi上的pathlib2模块在 Python 2.7 上使用。

使用filter函数os.path.isdir os.listdir()这样的filter(os.path.isdir,[os.path.join(os.path.abspath('PATH'),p) for p in os.listdir('PATH/')])

如果你只想要顶部列表文件夹,请使用listdir作为步行花费太多的时间。