有没有一种方法可以在Python中检索子目录而不必遍历所有文件?

有没有一种方法可以在Python中检索子目录而不必遍历所有文件?,python,os.walk,Python,Os.walk,我正在寻找一种列出当前工作目录中包含的子目录的方法,但是,我还没有找到一种不遍历所有文件的方法 基本上,如果我有一个包含大量文件和两个文件夹的文件夹,我需要一种方法,可以快速返回包含两个文件夹名称的列表,而不必扫描所有文件 在Python中有没有实现这一点的方法 编辑:我应该澄清一下,我的问题是关于检索目录的性能。我已经知道几种获取目录的方法,但是如果工作目录中也有一堆文件,它们的速度都会减慢。不确定是否有任何直接的标准函数可以为您实现这一点。但是您可以使用,os.walk()的每次迭代都返回一

我正在寻找一种列出当前工作目录中包含的子目录的方法,但是,我还没有找到一种不遍历所有文件的方法

基本上,如果我有一个包含大量文件和两个文件夹的文件夹,我需要一种方法,可以快速返回包含两个文件夹名称的列表,而不必扫描所有文件

在Python中有没有实现这一点的方法


编辑:我应该澄清一下,我的问题是关于检索目录的性能。我已经知道几种获取目录的方法,但是如果工作目录中也有一堆文件,它们的速度都会减慢。

不确定是否有任何直接的标准函数可以为您实现这一点。但是您可以使用,
os.walk()
的每次迭代都返回一个格式的元组-

(dirpath, dirnames, filenames)
其中,
dirpath
是当前正在浏览的目录,dirnames包含
dirpath
中的目录,
filenames
包含其中的文件

您可以直接调用
next(os.walk())
来获取目录的上述元组结果,然后该元组中的第二个元素(索引-1)将是目录中的子文件夹

代码-

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

direcs
结尾是当前文件夹的子文件夹列表。您还可以在其中提供一些其他文件夹,以获取其中的文件夹列表。

无法仅从操作系统检索目录。你必须过滤结果。尽管如此,与
os.listdir
和较旧的
os.walk
实现相比,使用它似乎可以将性能提高一个数量级(请参见基准测试),因为它可以避免在可能的情况下检索除元数据以外的任何内容。如果您使用的是3.5,它已经集成到标准库中。否则,看起来您需要使用该包

os.scandir

ds = [e.name() for e in os.scandir('.') if e.is_dir()]

根据文档,
walk
是根据
scandir
实现的,它也提供了相同的加速。

我尝试过使用os.walk及其几个变体,但是,这些都会在文件之间迭代,这会在需要遍历包含大量文件的文件夹时导致速度减慢。我想我应该澄清一下,我的问题是关于检索子目录的性能的。
os.walk()
不会立即迭代子目录,在上面的代码中,它只在迭代
os.wak()
时迭代子目录,您只是获取第一级子目录和文件,它不会在子目录中迭代。os.walk()对我不起作用,因为它还检索目录之外的文件,这可能会导致速度减慢。目录中大约有多少个条目?考虑到目录只不过是表,其记录的形式为
| name | inode | |
,我怀疑是否有办法满足您的要求。即使有一个只返回目录的函数,它仍然必须遍历所有行,试图找出哪个条目对应于子目录,哪个不对应。我想说的是,“目录文件”和常规文件一起转储,而不是单独转储。@FMc:有任意数量的文件-我正在遍历一个我事先不知道的目录,所以我必须考虑一个目录,它可以包含任意数量的文件。@Novark您说您注意到了一个性能问题:它出现在多少个条目上?构建一个程序来处理任意数量的条目是没有意义的:一百万?十亿?正如praroh1所指出的,在一天结束时,您使用的任何东西都将遍历条目,无论是在Python中还是在幕后。@Novark-有一种方法可以区分这两者,但您仍然必须检查所有条目。不过,可以采取一些措施来提高性能。您会重复访问相同的文件夹,还是一次性访问?文件夹是否属于您的应用程序?