我有一个包含一个或多个文件名和/或文件通配符的字符串,例如" 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))以对其进行重复数据删除。