如何形成列表清单?

时间:2015-08-01 19:40:38

标签: python python-2.7

下面的代码是从文件中提取部分内容并将结果显示在单独的列表中。

我想形成一个已过滤掉的所有这些列表的列表。我试图在我的代码中形成它,但是当我尝试将其打印出来时,我得到一个空列表。

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']

等等。

2 个答案:

答案 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圈。