os.walk()的函数过滤模式,带有函数链

时间:2017-06-01 08:08:21

标签: python os.walk declarative

我需要在Python os.walk()期间包含/排除某些文件。

我的解决方案允许为imperative,但我的代码用户应该可以进行declartive编程。

包含/排除模式需要以语言中性表示形式给出(例如json)。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

这既是必要的,也是陈述性的。

find ./some_dir | grep -e '*.txt' | grep -v 'dont_keep.txt'

这是一个json的例子,这既是命令性的,也是声明性的:

bullets = {"include": ['hello'], "exclude": ['*.txt', '*.jpeg']}
weapon = filter(bullets)
walkers = os.walk('.')
[weapon(zombie) for zombie in walkers]

这是一个两个例子,并且比它需要的更复杂:

from functools import wraps
def zombie_killer(f):
    @wraps(f)
    def moral_code(**kwargs):
        w = kwargs.get('weapon', '')
        f = kwargs.get('friendlies', '')
        z = kwargs.get('zombies', '')
        def maps(walkers):
            for (hilltop, houses, zombies) in walkers:
                for creature in zombies:
                    if creature in f:
                        yield f
                    elif creature in zombie:
                        yield
        return maps
    return moral_code

@zombie_killer
def kill_directive(*args, **kwargs):
    ''' magic goes here '''
    print(args, kwargs)


watch = kill_directive(weapon=bullets, 
                       friendlies=['rick', 'morty'], 
                       zombies=['*.txt', '*.pid'])
list(watch(walkers))

这里可以看到一个非常好的例子: