没有隐藏文件夹的 os.walk

新手上路,请多包涵

我需要列出文件夹中包含目录路径的所有文件。我尝试使用 os.walk ,这显然是完美的解决方案。

但是,它还会列出隐藏的文件夹和文件。我希望我的应用程序不列出任何隐藏的文件夹或文件。您是否可以使用任何标志来使其不产生任何隐藏文件?

跨平台对我来说并不是很重要,如果它只适用于 linux (.* pattern) 就可以了

原文由 unddoch 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

不,没有选项 os.walk() 将跳过这些选项。你需要自己做(这很容易):

 for root, dirs, files in os.walk(path):
    files = [f for f in files if not f[0] == '.']
    dirs[:] = [d for d in dirs if not d[0] == '.']
    # use files and dirs

注意 dirs[:] = 切片赋值; os.walk 递归遍历 dirs 列出的子目录。通过将 dirs元素 替换为满足条件的元素(例如,名称不以 . 开头的目录), os.walk() 将不会访问目录达不到标准。

这仅在您将 topdown 关键字参数保留为 True 时有效,来自 --- 的 os.walk()

When topdown is True , the caller can modify the dirnames list in-place (perhaps using del or slice assignment), and walk() 只会递归到名称保留在 dirnames 中的子目录;这可用于修剪搜索,强加特定的访问顺序,甚至通知 walk() 调用者在恢复之前创建或重命名的目录 walk() 再次。

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 4.0 许可协议

我意识到这个问题没有被问到,但我有一个类似的问题,我想排除隐藏文件和以 __ 开头的文件,特别是 __pycache__ 目录。我提出这个问题是因为我试图弄清楚为什么我的列表理解没有达到我的预期。我没有用 dirnames[:] 修改列表。

我创建了一个前缀列表,我想排除并修改目录名,如下所示:

     exclude_prefixes = ('__', '.')  # exclusion prefixes
    for dirpath, dirnames, filenames in os.walk(node):
        # exclude all dirs starting with exclude_prefixes
        dirnames[:] = [dirname
                       for dirname in dirnames
                       if not dirname.startswith(exclude_prefixes)]

原文由 dmmfll 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题