下面的代码是从文件中提取部分内容并将结果显示在单独的列表中。
我想形成一个已过滤掉的所有这些列表的列表。我试图在我的代码中形成它,但是当我尝试将其打印出来时,我得到一个空列表。
import re
hand = open('mbox.txt')
for line in hand:
my_list = list()
line = line.rstrip()
#Extracting out the data from file
x=re.findall('^From .* ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])', line)
#checking the length and checking if the data is not present to the list
if len(x) != 0 and x not in my_list:
my_list.append(x[0])
print my_list
过滤后的列表是:
['15:46:24']
['15:03:18']
['14:50:18']
['11:37:30']
['11:35:08']
['11:12:37']
等等。
答案 0 :(得分:1)
有几点需要注意。如果你反复进行正则表达式匹配,我建议你首先编译模式,然后进行匹配。此外,您无需手动检查容器的长度以获得其bool值 - 只需执行if container:
。使用内置过滤器删除空项目。或者您可以使用一个自动避免重复的集合。在进行正则表达式匹配之前,我也不确定为什么要剥离空格字符。这有必要吗?
import re
match = r"^From .* ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])"
with open("mbox.txt") as f:
for line in f.readlines():
match = filter(None,re.findall(match, line))
data.append(list(match))
print(data)
这就是获取列表列表所需的全部内容。列表理解和过滤器的使用使代码更加紧凑。
答案 1 :(得分:0)
只需将my_list=list()
移出for
圈。