1

这是我的代码,它遍历目录并删除所有找到的 jpg 图像。

我想做的是为目录设置底层上限。(包括级别之前的文件夹,排除级别之后的文件夹)。

当我想设置顶级上限(跳过前两个级别)时它工作得很好:islice(2,2,None),但不适用于底盖(例如第 2 级)islice(0,2,None):。无论设置停止,它都包括以下所有目录。

import os 
from itertools import islice

def drop_n_elements(start,stop,iterable):
    next(islice(iterable, start, stop, None))

dir = r'test'

iterable = os.walk(dir)
drop_n_elements(0, 2, iterable)

for root, dirs, files in iterable:
    for name in files:
        if name.endswith(("jpg")):
            os.remove(os.path.join(root, name))
4

1 回答 1

2

你只是next在你的函数中做,所以它移动到下一个位置iterable但不返回islice. 这就是为什么它适用于第一种情况但不适用于第二种情况。您需要在函数中执行此操作:

def drop_n_elements(start, stop, iterable):
    return itertools.islice(iterable, start, stop)

然后,不只是调用函数,而是分配它的结果:

iterable = drop_n_elements(0, 2, iterable)

您也不需要Nonein islice,因为step是可选的,但这并没有引起任何问题。

于 2013-09-02T13:56:02.117 回答