일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- pandas
- 윈도우11
- 엑셀
- matlab
- win32com
- office
- Excel
- 윈도우10
- Windows10
- windows
- 오피스
- python3
- git
- Windows11
- Android
- 문자열
- 파이썬
- 파워포인트
- 파이썬3
- Outlook
- 아웃룩
- html
- python
- 깃
- pyqt5
- 파이썬GUI
- pythongui
- VBA
- 안드로이드
- 비주얼베이직
Appia의 IT세상
파이썬[Python] Project01-03 DBC_Base Message/Siganl Class Commnet(주석) Parse 추가 본문
파이썬[Python] Project01-03 DBC_Base Message/Siganl Class Commnet(주석) Parse 추가
Appia 2020. 1. 10. 21:19저 번 포스팅에서는 DBC 파일의 Message / Signal등을 Parsing하는 부분에 대해서 다루었습니다. 포스팅을 하던 차에는 생각치 못했던 문제에 봉착하게 되었습니다. 그것은 다름 아니라, 바로 주석 즉 Commnet에 대한 파싱 부분을 누락했던 것입니다.
파이썬[Python] Project01-02 DBC_Base Message/Siganl Class
많은 분들은 주석에 대해서 생각보다 많이 중요하게 상각합니다. 그래서 저번 포스팅에 이어서 이번 포스팅은 주석 부분을 파싱 하는 부분에 대해서 포스팅을 하고자 합니다.
주석을 추가하는 부분에 대해서 좀 많은 고민을 했습니다. Class안에 관련된 기능을 추가할 것지 아니면, 별도의 함수에서 관련된 클래스에 추가하여 작업을 할것인지에 대해서죠.
일단 별도의 함수에서 Class로 정의된 리스트에 접근해서 각 부분에 대해서 확인하여 Commnet를 입력하는 형태로 구성해봤습니다.
Commnent 추가
Message/Signal에 따라서 각 부분에 맞춰서 Comment를 추가하는 부분에 대해서 기능을 구현했습니다.
def insert_MSG_commnet(Messages,Comment):
eComment = Comment.split(' ')
tCommnet = re.findall('["].+["]', Comment)
for Message in Messages:
if Message.MessageID == eComment[2]:
break
if eComment[1] == 'SG_':
for signal in Message.signals:
if signal['signalName'] == eComment[3]:
signal['commnet'] = tCommnet[0]
elif eComment[1] == 'BO_':
Message.Commnet = tCommnet[0]
관련해서 간단히 해석해보면, Messages는 Message 클래스를 담고 있는 List입니다. 그리고 Comment는 DBC파일의 각각 줄입니다. 단, CM_ (comment) Prefix를 가지고 있는 라인입니다.
우선, Line를 받자마자, 공백으로 나눕니다. 그럼 다음과 같은 형태로 구성이 될 것입니다.
tComment는 " " 안의 있는 글자들을 별도로 저장하기 위해서 다음과 같은 정규식 형태로 저장하였습니다. ( 이부분은 나중에 별도로 포스팅 하도록 하겠습니다.
eComment[1] 부분은 이 부분이 어떤 부분의 대한 Comment인지 즉, Message/Signal에 대한 지침입니다. 그리고 eCommnet[2]는 MessageID입니다. eComment[3]은 Signal name입니다.
그 부분을 바탕으로 위에 부분을 추측 하시길 바랍니다. 그리고 여기 뿐만 아니라 메인 부분에도 몇가지 손을 봤습니다.
Message Class
class Msg :
def __init__(self,data):
data.replace('\n','')
data = data.split(' ')
data[3].replace(':','')
self._,self.MessageID,self.MessageName,self.SignalCount,self.TxNode = data
self.signals=[]
# 추가 부분 01-03
self.Commnet = None
위의 추가한 부분은 필수 부분은 아니지만, 나중을 위해서 일단, 추가 해놓은 부분입니다.
Organize_Data
def Organize_Data(DBCFile):
Total = []
eMsg = None
for i in DBCFile :
if "BO_ " == i[:4]:
if eMsg != None :
Total.append(eMsg)
eMsg = None
eMsg = Msg(i)
elif " SG_ " == i[:5]:
eMsg.insert_signal(i)
# 추가 부분 01-03
elif "CM_ " == i[:4]:
insert_MSG_commnet(Total,i)
return Total
여기에서는 데이터를 정리할 때 CM_ 부분을 보고 Comment 부분을 추가하기 위해 별도의 Action을 하기 위해서 다음과 같이 추가하였습니다. 즉, CM_ 부분일 때 주석 추가하는 부분의 함수인 insert_MSG_comment를 실행할 것입니다.
혹시 문의사항 및 궁금하신 사항이 있으시면 언제든지 댓글 및 방명록에 글 부탁드립니다.
'Python > Python 응용' 카테고리의 다른 글
파이썬[Python] 036 py파일 - exe파일(실행파일) 만들기 (0) | 2020.01.13 |
---|---|
파이썬[Python] 035 Container 타입의 Unpack (패킹/언패킹) (0) | 2020.01.11 |
파이썬[Python] Project01-02 DBC_Base Message/Siganl Class (3) | 2020.01.09 |
파이썬[Python] Project01-01 CAN DBC Loader/Writer 개요 (0) | 2020.01.08 |
파이썬[Python] 032 디렉토리(Directory) 확인 및 변경/절대주소/ 상대 주소 사용법 (0) | 2020.01.06 |