資源簡介
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
- 上一篇:python遺傳算法 源代碼
- 下一篇:python簡單神經網絡
評論
共有 條評論