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

2024-04-26 21:02:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

@ 2014 00:05:34 Jason "login" 0.01

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

#server crashed

@ 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()

不幸的是,我得到的错误是“AttributeError:'list'对象没有属性'startswith'”。有人能告诉我为什么会出现这个错误或者我的技术不起作用吗?你知道吗

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

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

Tags: l1read排序maindefsyslog2计划
1条回答
网友
1楼 · 发布于 2024-04-26 21:02:22

请考虑以下一小段代码:

首先我有两张单子

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()不适合您的原因。你知道吗

那么,解决办法是什么?用extend()替换append(),就可以了。你知道吗

相关问题 更多 >