【问题标题】:Exclude root directories using os.walk使用 os.walk 排除根目录
【发布时间】:2020-06-28 04:42:27
【问题描述】:

我正在尝试列出我的笔记本电脑的所有文件,但我想排除一些根目录。

例如: 我有以下文件:

 /Users/teste/demo/file.csv
 /Users/teste/demo3/file.csv
 /Users/project/file.csv

我想要的是从/Users/teste/ 中排除所有文件。为此我有这个代码:

import os
exclude = ['/Users/teste/',]
for root, dirs, files in os.walk("\\", topdown=False):
    if root not in exclude:
        for name in files:
            print(name)

但是,我的代码正在打印目录 demo 和 demo3 中的文件,因为根目录包含演示部分。如果我打印根目录,我会得到:

/Users/teste/demo 
/Users/teste/demo3 
/Users/project/

我只想包含 /Users/project/file.csv 文件

如何使用父根进行过滤?

【问题讨论】:

  • 你在print( root ) 中得到了什么?也许它和你想象的不一样。
  • 我明白我在这个问题上所说的话:/Users/teste/demo /Users/teste/demo3 /Users/project/
  • 你可以随时测试root.startswith("/Users/teste/")
  • 但是如果我需要过滤更多目录,我会失去列表功能
  • 然后创建使用for循环测试列表中所有元素的函数

标签: python os.walk


【解决方案1】:

您可以将startswithtuple 一起使用(不列出)

if not root.startswith( ('/Users/teste/', '/other/folder') ):

import os

exclude = ['/Users/teste/',]

exclude = tuple(exclude)

for root, dirs, files in os.walk("\\", topdown=False):
    if not root.startswith(exclude):
        for name in files:
            print(name)

顺便说一句:

如果您想使用无法获取列表或元组的函数,那么您可以使用any() 和列表推导来检查列表中的所有元素

例如startswith()

if not any(root.startswith(x) for x in exclude):

或用于regex(这对于在exclude 中创建更复杂的元素很有用)

if not any(re.findall(x, root) for x in exclude):

【讨论】:

    猜你喜欢
    • 2022-06-27
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多