检查目录及其子目录并打印路径

时间:2018-07-10 12:31:45

标签: python recursion

我想编写一些代码来检查目录(及其子目录)是否与给定的字符串匹配,让该字符串为New。然后,我要打印从根到包含此字符串New的特定目录的路径。但是,我的代码仅正确打印第一级目录,例如C:\\New Folder,如果内部还有一个子目录也与字符串匹配,例如C:\\New Folder\\New Folder,则它将仅打印为{ {1}}。有关更多详细信息,请查看我的代码段:

C:\\New Folder

所以我要打印的是 import os rootDir = 'C:\\New Folder' os.chdir(rootDir) for root, subdirs, files in os.walk(rootDir): for dirs in subdirs: splitdirs = dirs.split(" ") prefix = "New" if splitdirs[0] == prefix: newDir = os.path.join(rootDir, dirs) print(newDir) C:\\New Folder,相反,它给了我C:\\New Folder\\New Folder两次。谁能解释为什么会这样?我是新来的,所以这里可能缺少某种编程思维方式。谢谢您的检查。

4 个答案:

答案 0 :(得分:1)

我认为您唯一需要更改的是以下行:

newDir = os.path.join(rootDir, dirs)

收件人:

newDir = os.path.join(root, dirs)

编辑

如果您的搜索词已经存在于rootDir中,则可以按照以下步骤简化代码:

import os
root_dir = 'C:\\New Folder'
searching_word= "New"
for root, subdirs, files in os.walk(root_dir):
    current_directory = os.path.basename(root)
    if searching_word in current_directory:
        print(root)

答案 1 :(得分:1)

不要查看subdirsos.walk()会递归工作,因此您可以只使用root。您也不必在那里chdir

import os
root_dir = 'C:\\New Folder'
prefix = "New"
for root, subdirs, files in os.walk(root_dir):
    current_dir = root.split("\\")[-1] #name of current dir
    dirname_splitted = current_dir.split() #split() implies split(" ")
    if dirname_splitted[0] == prefix:
        print(root)

不知道它是否可以在Windows上运行,但是可以在我的Ubuntu上使用root_dir = "/tmp"root.split("/")

编辑:在注释中,您说它应仅包含给定的前缀,而不以其开头。代码变得简单一些了:

import os
root_dir = 'C:\\New Folder'
prefix = "New"
for root, subdirs, files in os.walk(root_dir):
    current_dir = root.split("\\")[-1] #name of current dir
    if prefix in current_dir:
        print(root)

答案 2 :(得分:0)

定义newDir时,您使用的是rootDir,而不是root。 rootDir是您的第一个文件夹,而root是当前os.walk迭代的路径。

您的代码应为:

import os
rootDir = os.path.join(os.getcwd())
os.chdir(rootDir)
for root, subdirs, files in os.walk(rootDir):
    for dirs in subdirs:
        splitdirs = dirs.split(" ")
        prefix = "New"
        if splitdirs[0] == prefix:
            newDir = os.path.join(root, dirs)
            print(newDir)

答案 3 :(得分:-1)

您需要这个

import os
rootDir = 'D:\\New folder'
os.chdir(rootDir)
for root, subdirs, files in os.walk(rootDir):
    for dirs in subdirs:
        splitdirs = dirs.split(" ")
        prefix = "New"
        if splitdirs[0] == prefix:
            newDir = os.path.join(root, dirs)
            print(newDir)