我目前正在尝试创建一个根据时间戳对日志进行排序的程序。日志采用以下格式:
@ 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']
答案 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()
即可。