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

8 浏览
0 Comments

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

在Python中,有没有办法返回当前目录中所有子目录的列表?\n我知道可以用文件来做到这一点,但我需要获取目录的列表。

0
0 Comments

在当前目录下获取所有子目录列表的问题的出现原因是需要在Python中获取当前目录下的所有子目录,并且希望能够获取子目录的完整路径。解决方法是使用Python的os模块来实现,具体方法如下:

1. 使用Python 3.5及以上版本,可以使用以下代码获取当前目录下的所有子目录的完整路径:

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

这将返回子目录的完整路径。如果只需要子目录的名称,可以使用`f.name`代替`f.path`。

2. 如果需要递归地获取所有子目录和文件,可以使用以下函数,它比`os.walk`和`glob`更快,并且会返回所有子目录和子目录中的所有文件:

import os
def fast_scandir(dirname):
    subfolders= [f.path for f in os.scandir(dirname) if f.is_dir()]
    for dirname in list(subfolders):
        subfolders.extend(fast_scandir(dirname))
    return subfolders

这将返回所有子目录的完整路径。与`os.walk`相比,这种方法更快,而且比`glob`快得多。

以上是解决获取当前目录下所有子目录的问题的方法。根据测试结果,使用`os.scandir`函数是最快的方法,而使用`os.walk`和`glob.glob`函数的速度较慢。如果需要递归地获取所有子目录和文件,可以使用`fast_scandir`函数。

使用这些方法可以方便地获取当前目录下的所有子目录,并且可以根据需要获取子目录的完整路径或只获取子目录的名称。如果在递归获取所有子目录和文件时,速度较慢,可以尝试优化代码或使用其他方法来提高效率。

0
0 Comments

问题的出现原因:需要获取当前目录下的所有子目录。

解决方法:使用glob模块的glob函数,并设置recursive参数为True,代码如下:

from glob import glob
glob("/path/to/directory/*/", recursive=True)

需要注意在通配符"*"后加上斜杠"/"。

如果不能假设斜杠"/"为文件夹分隔符,可以使用os模块的join函数进行路径拼接,代码如下:

import os
glob(os.path.join(path_to_directory, "*", ""))

然而,这种方法对于子目录并不适用。使用glob模块的完整解决方法请参考链接:Use a Glob() to find files recursively in Python?

如果想要使glob函数递归,可以添加参数"recursive=True",代码如下:

glob("/path/to/directory/**/", recursive=True)

这样就可以获取所有子目录了。

0
0 Comments

问题的原因是有人想要获取当前目录中的所有子目录。解决方法是使用Python的os模块中的os.walk函数来实现。

os.walk函数可以遍历目录树,并返回一个包含子目录信息的元组。该元组的第一个元素是目录名,因此通过使用列表推导式可以获取所有的子目录。代码如下:

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

如果只想获取当前目录的直接子目录,也可以使用os.walk函数的另一种方式。代码如下:

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

还可以使用os.listdir和os.path.isdir函数来实现获取当前目录的子目录。具体的解决方法可以参考stackoverflow上的回答,链接为:How to get all of the immediate subdirectories in Python

某些情况下了关于os.walk和os.listdir+os.path.isdir解决方案性能差异的问题。他们进行了性能测试,并得出结论在处理具有10,000个子目录的目录时,两种方式的性能差异可以忽略不计。

但是,还有人指出在网络驱动器上进行性能测试时,两种方式的性能差异是显著的。

另外,还某些情况下从Python 3.5开始,os.walk函数会比os.listdir+os.path.isdir函数更快,尤其是在网络驱动器上。原因是os.walk函数是懒惰的,它只执行一次目录列表和分类操作,然后就不再进行操作。而os.listdir+os.path.isdir函数需要进行每个子目录的stat系统调用。

使用os.walk函数是获取当前目录的所有子目录的最佳解决方法。它具有良好的性能,并且可以适用于各种情况。

0