根据字符串的开头创建Python列表

时间:2014-03-29 22:10:07

标签: python list filter

我目前正在尝试创建一个根据时间戳对日志进行排序的程序。日志采用以下格式:

  

@ 2014 00:05:34杰森"登录" 0.01

     

@ 2014 00:10:34 Jason" firefox" 0.01

     

#server崩溃

     

@ 2014 00:11:54 Jason" logoff" 0.01

我正在从名为log.1和log.2的计算机上的文件中读取这些日志。

我的计划是首先删除以"#"开头的所有行。因为评论的行不需要排序......除非有更好的方法来做这件事。

为了删除所有以"#"开头的行,我的计划是使用列表理解。以下是我到目前为止的情况:

def main():
    Logs = []
    getLogs(Logs)
    sortLogs(Logs)

def getLogs(L):
    Log1 = sys.argv[1]
    Log2 = sys.argv[2]
    L1 = read(Log1)
    L2 = read(Log2)
    L.append(L1)
    L.append(L2)

def sortLogs(L):
    sLog = [i for i in L if i.startswith('@')]
    print(sLog)

def read(fName):
    return open(fName, "r").readlines()

main()

不幸的是,我收到"属性错误的错误:' list'对象没有属性' startswith'"。任何人都可以提供一些见解,了解我为什么会收到此错误或我的技术无效?

我还在Python IDE中完成了以下工作,并且它已经起作用了:

>>> newlist = ['@test','new','#no','pleasework']
>>> finallist = [x for x in newlist if x.startswith('@')]
>>> finallist
['@test']

1 个答案:

答案 0 :(得分:1)

考虑以下一小段代码:

首先我有两个清单

lst1 = [1,2,3,4]
lst2 = [2,3,4,5]

然后我创建一个新列表并像你在代码中那样追加上面两个:

l = list()
l.append(lst1)
l.append(lst2)

现在,我正在打印新列表中第一个元素的类型。

print type(l[0])

它说<type 'list'>,这就是你的问题。您的新列表中有两个列表,这就是startswith()不适合您的原因。

那么,解决方案是什么?将append()替换为extend()即可。

相关问题