• 大小: 35KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: Python
  • 标签: python  

资源简介

python对A2L文件解析的脚本,参照ASAP2文件协议,提出为dataframe格式,可以直接用dataframe筛选A2L中标定量的信息

资源截图

代码片段和文件信息

#-*- coding:utf-8 -*-
import re
import pandas as pd
import time

class IncaA2L:
    def __init__(self filename):
        self.filename = filename
        self.CharacDaF = pd.Dataframe()
        self.RecDaF = pd.Dataframe()
        self.ConvMothDaF = pd.Dataframe()

        with open(self.filename) as self.read_file:
            self.content = self.read_file.read()
        self.content = re.sub(r“(/\*.*\*/)“ ““ self.content)             #删除注释

    #---------------------------------------------------#
    # description:通过datatype来确定data的长度
    # 输入:数据类型对应的字符
    # 返回值为长度:124
    #---------------------------------------------------#
    def FindLength(self DataType):
        if DataType == ‘UBYTE‘:
            return 1
        elif DataType == ‘SBYTE‘:
            return 1
        elif DataType == ‘UWORD‘:
            return 2
        elif DataType == ‘SWORD‘:
            return 2
        elif DataType == ‘ULONG‘:
            return 4
        elif DataType == ‘SLONG‘:
            return 4
        else:
            return 4
    #----------------------------------------#
    # 返回值为Dataframe:DataTypeName DataType
    #
    #----------------------------------------#
    def RECORD_LAYOUT_Export(self):

        #找出所有的描述数据类型块的区域
        DataType = re.findall( r‘/begin *?RECORD_LAYOUT([\S\s]*?)/end *?RECORD_LAYOUT‘ self.content re.M|re.I)


        #创建一个空白dataframe用于存放所有数据类型信息
        DFDataTypeInfo = pd.Dataframe()
        #创建一个空白list用于存放name
        ListDataTypeName = []
        #创建一个空白list用于存放具体信息
        ListDataTypeInfo = []

        #处理具体一个的数据类型块
        for i in DataType:
            #去除其中某个描述数据类型块的前后空白字符
            i = i.strip()

            #创建一个临时的list用于提取数据类型name以空白字符分隔
            TempList = re.split(‘[\s]*‘ i)
            ListDataTypeName.append(TempList[0])

            #对该块进行按行分隔
            DataTypeInfoLine = re.split(‘\n‘ i)

            #创建一个空白字典用于存放具体数据类型信息
            DicDataTypeInfo = {}

            #对该块信息描述进行提取
            for j in DataTypeInfoLine:
                #去除信息描述行的前后空白字符
                j = j.strip()
                #如果j不是数据类型name那一行
                if j != TempList[0]:

                    #对信息描述行按空白符进行分隔
                    DataTypeInfo = j.split()

                    ‘‘‘
                    /begin RECORD_LAYOUT ValA_Ws16
                      FNC_VALUES 1.0 SWORD COLUMN_DIR DIRECT 
                      ALIGNMENT_WORD 2.0
                      ALIGNMENT_LONG 4.0
                      ALIGNMENT_FLOAT32_IEEE 4.0
                      ALIGNMENT_FLOAT64_IEEE 4.0
                    /end RECORD_LAYOUT
                    ‘‘‘

                    #数据类型对应的描述对象行,分隔后都大于3个成员,过滤掉不需要的信息,如上
                    if len(DataTypeInfo) >= 3:
                        #DataTypeInfo[0]:数据类型对应的描述对象,DataTypeInfo[2]:数据类型
                        DicDataTypeInfo[DataTypeInfo[0]] = DataTypeInfo[2]
            #将数据类型信息字典添加到list
            List

评论

共有 条评论