是否可以对迭代器进行去除(不是可迭代的迭代器)?

时间:2018-01-12 22:05:44

标签: python iterator duplicates python-3.6

我有一个包含一个或多个文件名和/或文件通配符的字符串,例如" somefile.txt"或" somefile.txt * .pdf * .txt foo.bar"。

我想将其转换为包含所有匹配文件的单个迭代器,并且迭代器不应包含任何重复项。例如,在上面的第二个例子中,somefile.txt自然会出现两次,一次来自文件名,一次来自* .txt。我希望它在迭代器中只出现一次。

这是我一直在玩的东西(大部分来自this SO问题),这些都没有被删除。 (我只是打印这个例子,显然会在for循环中进行处理。)

import itertools as it
from glob import iglob

def glob_everything(filelist):
    return it.chain.from_iterable(iglob(f) for f in filelist)

parmfiles = "somefile.txt *.txt"
files = parmfiles.split()

for file in glob_everything(files):
    print('3',file)

我使用iglob而不是glob,因为可能涉及几千个文件,我试图不占用所有这些文件。

是否可以(轻松)删除上面glob_everything函数中的迭代器? (我希望在开始之前对迭代器和/或列表进行去除,我不想弄清楚我是否已经在处理列表时看到了文件名。)

如果没有,我假设我必须单独填写规范,每次扩展一个列表,然后将列表转换为一个集合(例如set(filelist))以对其进行重复数据删除。

0 个答案:

没有答案