我想编写一些代码来检查目录(及其子目录)是否与给定的字符串匹配,让该字符串为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
两次。谁能解释为什么会这样?我是新来的,所以这里可能缺少某种编程思维方式。谢谢您的检查。
答案 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)
不要查看subdirs
,os.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)