我在使用python regex搜索文件时遇到了一些麻烦。
我想输入一个正则表达式列表并返回与其中一个匹配的文件行在一个锯齿状列表中,该列表以与rexex列表相同的方式索引,即如果一行与第一个正则表达式匹配,它将添加:results[0].append(line)
,如果第二个匹配:results[1].append(line)
,依此类推......
import re
def search(path, regex_list):
reg_list = [re.compile(regex) for regex in regex_list]
results = reg_list.__len__()*[[]]
with open(path, 'r') as fp:
for line in fp:
for i, reg in enumerate(reg_list):
if reg.search(line):
results[i].append[line]
return results
print(search("./log", ['1234', '1233']))
我喜欢我的输出:
[['log entry 1234\n'], ['log entry 1233\n']]
但我真正得到的是:
[['log entry 1234\n', 'log entry 1233\n'], ['log entry 1234\n', 'log entry 1233\n']]
我对python很新,所以我可以做一些非常愚蠢的事情,任何想法是什么?
答案 0 :(得分:2)
通过在代码中乘以空列表(results = reg_list.__len__()*[[]]
)的列表,您只需创建几个指向同一空列表的指针。
如果某些代码稍后将某些内容附加到该列表,则所有指针都指向该扩展列表。
而是在init:
创建(不相同的)空列表的列表[[] for reg in reg_list]