有没有办法在Python中检索子目录而不必迭代所有文件?

时间:2015-08-01 02:25:42

标签: python os.walk

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

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

有没有办法在Python中执行此操作?

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

2 个答案:

答案 0 :(得分:2)

不确定是否有任何可以为您执行此操作的直接标准功能。但是你可以使用os.walk()mov [esp+4], ebx mov [esp], format 的每次迭代都会返回格式的元组 -

os.walk()

(dirpath, dirnames, filenames) 目前正在走过的目录,dirnames包含dirpath内的目录,而dirpath包含其中的文件。

您可以直接调用filenames来获取目录的上述元组结果,然后该元组中的第二个元素(index - 1)将成为目录中的子文件夹。

代码 -

next(os.walk())
最后的

direcs = next(os.walk('.'))[1] 将是当前文件夹的子文件夹列表。您还可以在其中提供其他文件夹以获取其中的文件夹列表。

答案 1 :(得分:1)

没有办法只从操作系统中检索目录。你必须过滤结果。虽然看起来使用os.scandir提高了magnitude(参见基准)的顺序,而不是os.listdir和较早的os.walk实现,因为它避免了在可能的情况下检索除元数据之外的任何内容。如果您使用3.5,它已经集成到标准库中。否则,您似乎需要使用scandir包。

过滤os.scandir

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

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