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

Python 检查目录及其子目录并打印路径,python,recursion,Python,Recursion,我想写一些代码来检查目录(及其子目录)是否与给定字符串匹配,让字符串为New。然后我想打印从根目录到包含此字符串的特定目录的路径New。但是,“我的代码”仅正确打印第一级目录,例如,C:\\New Folder,如果其中有一个子目录也与字符串匹配,例如C:\\New Folder\\New Folder,它将仅打印为C:\\New Folder。有关更多详细信息,请查看我的代码snipet: import os rootDir = 'C:\\New Folder' os.chdir(roo

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

 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
,而不是给我两次
C:\\New Folder
。有人能解释为什么会这样吗?我是新来的,所以我可能在这里缺乏一些编程思维方式。感谢您的检查。

定义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)

我认为你唯一需要改变的是以下几行:

newDir = os.path.join(rootDir, 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)

不要查看
子目录
os.walk()
以递归方式工作,因此您只需使用
根目录
。您也不必在那里
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\u 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)
你需要这个

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)

os.chdir(rootDir)
是否冗余目录名应包含给定前缀或以其开头?您可能有一个输入错误:在
os.path.join(…)
中使用
root
而不是
rootDir
@AzatIbrakov目录名应仅包含给定前缀prefix@AzatIbrakov是的,谢谢你指出这一点,不知何故,我没有注意到我犯了一个错误,如果“起点”
rootDir
,是
C:\\New Folder
,这个解决方案会打印它吗?在我看来,它不是…是的,你是对的,如果搜索词已经存在于rootDir中,它就不会打印出来。我更新了这个案例的答案。
root.split(\\”[-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)