我需要在Python os.walk()期间包含/排除某些文件。
我的解决方案允许为imperative,但我的代码用户应该可以进行declartive编程。
包含/排除模式需要以语言中性表示形式给出(例如json)。
知道如何解决这个问题吗?
答案 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))
这里可以看到一个非常好的例子: