基于字符串的开头创建Python列表

基于字符串的开头创建Python列表,python,list,filter,Python,List,Filter,我目前正试图创建一个程序,根据时间戳对日志进行排序。日志的格式如下: @2014 00:05:34 Jason“登录”0.01 @2014 00:10:34 Jason“firefox”0.01 #服务器崩溃 @2014 00:11:54杰森“注销”0.01 我正在从计算机上名为log.1和log.2的文件中读取这些日志 我的计划是首先删除所有以“#”开头的行,因为不需要对注释行进行排序。。。除非有更好的方法 为了删除所有以“#”开头的行,我的计划是使用列表理解。以下是我到目前为止的情况: de

我目前正试图创建一个程序,根据时间戳对日志进行排序。日志的格式如下:

@2014 00:05:34 Jason“登录”0.01

@2014 00:10:34 Jason“firefox”0.01

#服务器崩溃

@2014 00:11:54杰森“注销”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()
不幸的是,我得到了“AttributeError:'list'对象没有属性'StartWith'”的错误。有人能提供一些关于我为什么会出现这个错误或者我的技术不起作用的见解吗

我在Python IDE中也做了以下工作,并且效果良好:

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

考虑以下一小段代码:

首先我有两张清单

lst1 = [1,2,3,4]
lst2 = [2,3,4,5]
然后我将创建一个新列表,并像您在代码中所做的那样附加上述两个:

l = list()
l.append(lst1)
l.append(lst2)
现在,我正在打印新列表中第一个元素的类型

print type(l[0])
上面写着
,这就是你的问题所在。新列表中有两个列表,这就是为什么
startswith()
不适合您的原因

那么,解决方案是什么?用
extend()
替换
append()