获取当前目录中所有子目录的列表
有没有办法返回Python中当前目录中的所有子目录的列表?
我知道你可以用文件做到这一点,但我需要获取目录列表。
你的意思是直接的子目录,或者每个目录在树下?
无论哪种方式,你可以使用os.walk
来做到这一点:
os.walk(directory)
会为每个子目录产生一个元组。 三元组中的第一个条目是一个目录名称,所以
[x[0] for x in os.walk(directory)]
应recursion地给你所有的子目录。
请注意,元组中的第二个条目是第一个条目中子条目的子目录列表,因此您可以使用它,但不太可能节省很多。
但是,您可以使用它只是为了给你直接的子目录:
next(os.walk('.'))[1]
或者使用os.listdir
和os.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.listdir
与os.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
的子目录的名称
您可以使用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作为步行花费太多的时间。
- LogCat消息:找不到Google Play服务资源。 检查您的项目configuration,以确保包含资源
- 系统差异。 在Java中退出(0),System.exit(-1),System.exit(1)