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)