嗨
,我需要从巨大的“必要”列表中过滤掉所有不包含符号的行,示例代码:
def any_it(iterable):
for element in iterable:
if element: return True
return False
regexp = re.compile(r'fruit=([A-Z]+)')
necessary = ['YELLOW', 'GREEN', 'RED', ...] # huge list of 10 000 members
f = open("huge_file", "r") ## file with > 100 000 lines
lines = f.readlines()
f.close()
## File rows like, let's say:
# 1 djhds fruit=REDSOMETHING sdkjld
# 2 sdhfkjk fruit=GREENORANGE lkjfldk
# 3 dskjldsj fruit=YELLOWDOG sldkfjsdl
# 4 gfhfg fruit=REDSOMETHINGELSE fgdgdfg
filtered = (line for line in lines if any_it(regexp.findall(line)[0].startswith(x) for x in necessary))
我有 python 2.4,所以我不能使用内置的any()
.
我等待这个过滤很长时间,但是有什么方法可以优化它吗?例如第 1 行和第 4 行包含“RED..”模式,如果我们发现“RED..”模式没问题,我们可以跳过在 10000 成员列表中搜索第 4 行相同的模式吗?
还有其他优化过滤的方法吗?
谢谢你。
...已编辑...
UPD:请参阅此帖子的评论中的真实示例数据。我也有兴趣按“水果”结果排序。谢谢!
...结束编辑...