查找目录的“根”

2024-04-20 14:15:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python编写一个函数,在脚本级别扫描目录的内容(一旦清除了bug,我会将其切换为不需要在同一级别,但对于这个问题,它是不相关的),并递归地列出指向任何非目录的路径。我的逻辑是:

如果父“目录”不是一个目录,那么它必须是一个文件,所以打印它的路径。否则,对于该目录中的每个“文件”,如果每个“文件”实际上不是一个目录,则说明该文件的路径,如果“文件”实际上是一个目录,则再次调用该函数。你知道吗

我使用的环境如下:我的脚本与名为a的目录处于同一级别,a中有一个文件d.txt,还有另一个名为b的目录。b中有一个文件c.text。按照我希望这个函数执行的方式,首先它应该认识到a实际上是一个目录,因此开始遍历它的内容。当它遇到d.txt时,它应该打印出它的路径,然后当它遇到目录b时,它应该开始迭代它的内容,从而在看到它时打印到c.txt的路径。因此在本例中,脚本的输出应该是“C:\private\a\d.txt,C:\private\a\b\C.txt”,而是“C:\private\d.txt,C:\private\b”。以下是迄今为止的代码:

import os

def find_root(directory):
    if not os.path.isdir(directory):
        print(os.path.abspath(directory))
    else:
        for file in os.listdir(directory):
            if not os.path.isdir(file):
                print(os.path.abspath(file))
            else:
                find_root(file)

find_root('a')

Tags: 文件path函数路径目录txt脚本内容
1条回答
网友
1楼 · 发布于 2024-04-20 14:15:50

[Python]: os.listdir(path='.')

Return a list containing the names of the entries in the directory given by path.

但它们只是基本名称。因此,为了让它们有意义,当您深入递归时:

  1. 在“当前”文件夹前面加上他们的名字
  2. cd到每个文件夹(以及从递归返回时cd返回)

下面是修改后的代码,以使用1st方法:

import os

def find_root(path):
    if os.path.isdir(path):
        for item in os.listdir(path):
            full_item = os.path.join(path, item)
            if os.path.isdir(full_item):
                find_root(full_item)
            else:
                print(os.path.abspath(full_item))
    else:
        print(os.path.abspath(path))


if __name__ == "__main__":
    find_root("a")

注意事项:

  • 我重新创建了你的文件夹结构
  • 为了清楚起见,我重新命名了一些变量
  • 我颠倒了否定条件

输出

c:\Work\Dev\StackOverflow\q47193260>"c:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" a.py
c:\Work\Dev\StackOverflow\q47193260\a\b\c.txt
c:\Work\Dev\StackOverflow\q47193260\a\d.txt

相关问题 更多 >