Python-解析或读取具有不同字符串长度的文本文件

Python-解析或读取具有不同字符串长度的文本文件,python,parsing,text-files,string-length,Python,Parsing,Text Files,String Length,我的日志文件“.log”或“.txt”的内容(信息:以下数字为行): 发送事件[ts=19s(00:03:18.243);msg=com.[messageType=MessageOutputType{messageId=840,Before=0,After=0},relPosition=233,Position=0.99494372446684,Number=14,timestamp=-14588,segmentId=12,vehiclePos=Position{lon=0.0082285627

我的日志文件“.log”或“.txt”的内容(信息:以下数字为行):

  • 发送事件[ts=19s(00:03:18.243);msg=com.[messageType=MessageOutputType{messageId=840,Before=0,After=0},relPosition=233,Position=0.99494372446684,Number=14,timestamp=-14588,segmentId=12,vehiclePos=Position{lon=0.008228562772274017,lat=0.0}]

  • 不同的字符串。。不以发送事件开始

  • 不同的字符串。。不以发送事件开始

  • 发送事件[ts=20s(00:03:18.243);msg=com.[messageType=MessageOutputType{messageId=840},relPosition=234,Position=0.9949437244446684,Number=14,timestamp=-14588,segmentId=12,vehiclePos=Position{lon=0.008228562772274017,lat=0.0}]

  • 不同的字符串。。不以发送事件开始

  • 发送事件[ts=21s(00:03:18.243);msg=com。[messageType=MessageOutputType{messageId=840,Before=0,After=0},Number=14,timestamp=-14588,segmentId=12,vehiclePos=Position{lon=0.008228562772274017,lat=0.0}]

  • 在每一行中,我都有重复的不同字符串。我想从以“发送事件”开头的行中获取信息。 在发送事件行中,我有不同的字符串长度和不同数量的变量和值

    我想获得每个“发送事件”行的变量值,该行绘制值与时间的关系。

    例如,“ts”=时间,“relPosition”=变量

    ts和重新定位的可能输出:

    [19233]

    [20,]

    [21234]

    如何提取数据?我想对“segmentId”或其他变量也这样做

    我尝试了“导入re”,但遇到了不同的问题,也许你可以给我一个Python2.7的例子

    with open("filename.log") as fp:
        lines = fp.readlines()
        for line in lines:
            if line.startswith('Sending Event'):
                l = line[14:].replace('; msg=com.[messageType=MessageOutputType{', ',').replace(' ,vehiclePos=Position{', ', ').replace('}', '')
                d = {i.strip().split('=')[0]: i.strip().split('=')[1] for i in l.split(',')}
                print([d['ts'].split('s')[0], d['relPosition'] if 'relPosition' in d.keys() else '', d['segmentId']])
    
    请注意,
    d
    是一个包含所有变量的字典。您可以通过
    d['variable\u name
    ]访问和打印它们

    输出:

    ['19', '233', '12']
    ['20', '234', '12']
    ['21', '', '12']
    

    谢谢,但我得到了以下错误-->d={i.strip().split('=')[0]:i.strip().split('=')[1]用于l.split(',')}索引器中的i:列表索引超出范围。我忘了我也有没有以“发送事件”开头的行。我必须先找到以“发送事件”开头的行。我编辑了我的描述。好的,我已经更新了答案以过滤掉不同的行。