# import
from pathlib import Path
import pandas as pd
# asc 파일을 줄 별로 읽어오기
dir_asc = Path('.').absolute()/'asc'
file_asc = dir_asc/'obd_ethernet_log.asc'
with open(file_asc, "r") as file:
lines = file.readlines()
# 분석 대상 라인들만 추출한다.
lines_oi = [] # lines of interest
elements_oi = [] # elements of interest
for line in lines:
elements = line.strip().split()
interesting = True
# 첫 element가 타임스탬프가 아니면 분석 대상이 아니다.
try:
ts = float(elements[0])
except ValueError:
interesting = False
# Start, STAT, BUSSTATISTIC가 포함된 라인은 분석 대상이 아니다.
for element in elements:
if ('STAT' in element) or ('BUSSTATISTIC' in element) or ('Start' in element):
interesting = False
break
# 분석 대상을 lines_oi에 추가한다.
if interesting:
# 3번째 element가 Tx인 경우, FCS가 없는 경우가 있다. 이 경우, FCS를 추가한다.
if elements[3] == 'Tx':
fcs_found = False
for element in elements[4:]:
if 'FCS' in element:
fcs_found = True
break
if not fcs_found:
elements.insert(5, 'FCS:00000000')
elements_oi.append(elements)
lines_oi.append(line.strip())
# linses_oi의 내용을 본다.
lines_oi[:5]
['0.257025 ETH 1 Rx 46:333300000002A81374BD389D86DD6000000000103AFFFE800000000000004C705F11449FCF51FF0200000000000000000000000000028500674D000000000101A81374BD389D FCS:734d6816 Ports:Port6 Sim:0',
'0.257025 ETH 1 Tx 46:333300000002A81374BD389D86DD6000000000103AFFFE800000000000004C705F11449FCF51FF0200000000000000000000000000028500674D000000000101A81374BD389D Ports:ECU Sim:0',
'0.257032 ETH 1 Tx 46:333300000002A81374BD389D86DD6000000000103AFFFE800000000000004C705F11449FCF51FF0200000000000000000000000000028500674D000000000101A81374BD389D FCS:734d6816 Ports:Port5 Sim:0',
'0.272157 ETH 1 Rx 9d:333300010002A81374BD389D86DD60054E1700671101FE800000000000004C705F11449FCF51FF0200000000000000000000000100020222022300672D4501D30E160008000202BF0001000E000100012A621DD5A81374BD389D0003000C0DA81374000000000000000000270011000F4445534B544F502D4B524E4E5330370010000E0000013700084D53465420352E30000600080011001700180027 FCS:40a51d09 Ports:Port6 Sim:0',
'0.272157 ETH 1 Tx 9d:333300010002A81374BD389D86DD60054E1700671101FE800000000000004C705F11449FCF51FF0200000000000000000000000100020222022300672D4501D30E160008000202BF0001000E000100012A621DD5A81374BD389D0003000C0DA81374000000000000000000270011000F4445534B544F502D4B524E4E5330370010000E0000013700084D53465420352E30000600080011001700180027 Ports:ECU Sim:0']
# lines_oi를 파일로 저장한다. 위에서 한 데이터 처리를 다시 안 해도 되도록.
file_new_asc = file_asc.with_suffix('.new.asc')
with open(file_new_asc, "w") as file:
for line in lines_oi:
file.write(line + "\n")