我正在寻找一种方法来列出当前工作目录中包含的子目录,但是,我找不到一种不会遍历所有文件的方法。
基本上,如果我有一个包含大量文件和2个文件夹的文件夹,我想要一种方法,可以快速返回包含2个文件夹名称的列表,而不必扫描所有文件。
有没有办法在Python中执行此操作?
编辑:我应该澄清,我的问题是关于检索目录的性能。我已经知道了几种获取目录的方法,但是如果工作目录中还有一堆文件,它们都会变慢。
答案 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
的形式实现的,它也提供相同的加速。