帮助优化来自 if 循环的搜索结果



我正在寻找一些帮助,以便从我的循环中获得所需的输出。

我正在尝试编译指向名为"已发布"的任何文件夹的路径列表。它几乎有效,但如果有人能告诉我一种方法来阻止循环吐出任何"已发布"的子目录,我将不胜感激。

import os
file = open('published_directories_list.txt', 'w');
top = "T:PROJECTS";
for root, dirs, files in os.walk(top, topdown=False):
    for name in dirs:
        myPath = os.path.join(root, name);
        if 'published' in myPath:
            print (myPath);
            file.write(myPath + 'n');
        else:
            print (myPath + ' - no published directory!');
file.close();
print('DONE!');

正在发生的事情是os.walk遍历top下的每个目录。因此,如果您有这样的目录结构:

top
  |
  - published
  |  |
  |  - something
  |
  - other

在循环中的某个点,您的线路:

myPath = os.path.join(root, name)

将加入/top/published根和something的名字。显然,当您检查if "published" is in myPath时,它会是。即使您正在查看 published 的子目录,您仍然会在路径中看到名称"已发布"。

解决此问题的一种简单方法是检查myPath是否以"已发布"结尾(使用 endswith 字符串方法),而不是检查它是否仅包含它。您可以将if语句修改为:

if myPath.endswith('/published')

请注意,我在我们正在检查的内容的开头包含一个反斜杠。这应该可以解决DSM的观点,即我们也不想匹配"未发布"。

>>> import os
>>> folder = 'MUI'
>>> for root, dirs, files in os.walk('C:\windows'):
    for dir_ in dirs:
        if folder.lower() == dir_.lower():
            print os.path.join(root, folder)
            dirs.remove(dir_)

C:windowsMUI
C:windowsAppPatchMUI
C:windowsHelpMUI
C:windowsHelpTourshtmlTourMUI
C:windowsHelpToursmmTourMUI
C:windowsHelpToursWindowsMediaPlayerMUI
C:windowsMicrosoft.NETFrameworkv2.0.50727MUI
C:windowsMicrosoft.NETFrameworkv3.0Windows Communication FoundationMUI
C:windowspchealthMUI
C:windowsResourcesThemesLunaMUI
C:windowsResourcesThemesLunaShellHomesteadMUI
C:windowsResourcesThemesLunaShellMetallicMUI
C:windowsResourcesThemesLunaShellNormalColorMUI
C:windowssrchasstMUI
C:windowssystem32MUI
C:windowssystem32oobeMUI
C:windowssystem32wbemMUI
C:windowsWebMUI

是的,您可以在迭代时触摸dirs(因此不会在此处浏览儿童)!!

我使用了小写的比较,因为 Windows 不关心大小写,但它会显示它。在类Unix系统上,像没有循环的if folder in dirs这样的比较将是好方法。

相关内容

  • 没有找到相关文章

最新更新