满足列出目录文件和子目录需求!用Python 4种方法实现,含os.popen原理
有时我们需要列出哪些文件和子目录在目录中。在这种情况下,有可用的现成命令,例如Windows中的DIR命令和Linux中的LS命令。我们如何使用Python代码实现它?

我们可以使用Python富库来轻松实现一个简单的版本。这是实施它的4种方法。
1。使用OS.Popen
OS.Popen的工作原理是创建一个新的子过程,然后使用此子过程执行命令。父过程和子过程通过管道进行通信。
根据调用Popen时传递的参数,我们可以通过管道读取子进程的输出或将数据写入子过程。默认情况下,读取子过程的输出。
从上面的描述中,我们可以看到Popen非常笼统,并且仅在我们的示例中使用。
然后,让我们开始使用它来满足我们的需求,代码如下:
import os
for line in os.popen("ls"):
print(line, end="")
哈哈,不是很简单吗?尽管此方法可以实现目标,但这不是我们想要的。我们最初想实施LS,但我们称LS为LS,因此从严格的意义上说,我们没有实施LS,所以让我们继续阅读其他方法,呵呵。
2。使用glob.glob
Glob可以根据您使用的通配符匹配文件。使用此功能,我们可以列出当前目录中的哪些文件和子目录,如下:
import glob
for line in glob.glob("*"):
print(line)
3。使用OS.Listdir
OS.ListDir还可以列出哪些文件和子目录在某个目录中,如下所示:
import os
for line in os.listdir("."):
print(line)
4。使用OS.Walk
OS.Walk在遍历目录方面非常强大。它不仅可以穿越您需要的目录,还可以递归遍历子目录。递归的深度可以由代码控制。让我们看一下如何穿越整个目录树以及如何控制深度。 。
OS.Walk默认情况下将穿越整个目录树。以下代码将递归打印当前目录中的所有文件:
import os
for dirname, subdirs, files in os.walk("."):
for line in files:
print(dirname.rstrip("/") + "/" + line)
那么,我们如何控制遍历的深度,例如仅横穿n层呢?实际上很简单。您只需要定义一个深度变量,然后在达到n后跳出循环即可。以下代码只会穿越1层:
import os
depth = 0
target = 1
for dirname, subdirs, files in os.walk("."):
for line in files:
print(dirname.rstrip("/") + "/" + line)
depth = depth + 1
if depth >= target:
break
到目前为止,我们已经完成了4种方法。如果您还有其他方法,请随时发表评论和交换。