如何用十六进制代码解析文本文件?
How to parse a text file with hex codes?
我正在尝试为此文件编写我的第一个解析脚本;
;$FILEVERSION=1.3
;$STARTTIME=44512.7163933106
;
;-------------------------------------------------------------------------------
; Bus Name Connection Protocol Bit rate
; 1 Connection1 Untitled6@_usb CAN 250 kbit/s
; 2 Connection2 Untitled5@_usb CAN 500 kbit/s
; 3 Connection3 Untitled1@_usb J1939 500 kbit/s
; 4 Connection4 Untitled2@_usb CAN 250 kbit/s
; 5 Connection5 Untitled3@_usb CAN 250 kbit/s
; 6 Connection6 Untitled7@_usb J1939 250 kbit/s
; 7 Connection7 Single@_usb CAN 250 kbit/s
;-------------------------------------------------------------------------------
; Message Number
; | Time Offset (ms)
; | | Bus
; | | | Type
; | | | | ID (hex)
; | | | | | Reserved
; | | | | | | Data Length Code
; | | | | | | | Data Bytes (hex) ...
; | | | | | | | |
; | | | | | | | |
;---+-- ------+------ +- --+-- ----+--- +- -+-- -+ -- -- -- -- -- -- --
1) 0.015 7 Rx 047A - 6 88 13 AD 92 11 00
2) 0.093 5 Rx 18FF6221 - 8 C0 F0 00 0C C0 FF 05 FF
3) 0.318 4 Rx 01FB - 8 02 30 00 C0 00 00 00 80
4) 0.484 7 Rx 02FA - 8 88 13 88 13 00 88 13 01
该文件是通过 CAN 从车辆记录的数据,我正在尝试使用 python 读取此文件,以免我不得不使用另一个缓慢且过时的应用程序。
如何以 pandas 可以处理数据的方式将其读入 python?
我是 python 的新手,也是解析文件的新手,非常感谢任何方向。
如果您的文件具有固定的列长度,请使用 read_fwf
:
widths = [8, 14, 3, 6, 9, 3, 5, 9999]
names = ['Message Number', 'Time Offset (ms)', 'Bus', 'Type', 'ID (hex)',
'Reserved', 'Data Length Code', 'Data Bytes (hex)']
df = pd.read_fwf('data.txt', index_col=None, comment=';',
header=None, widths=widths, names=names)
输出:
>>> df
Message Number Time Offset (ms) Bus Type ID (hex) Reserved Data Length Code Data Bytes (hex)
0 1) 0.015 7 Rx 047A - 6 88 13 AD 92 11 00
1 2) 0.093 5 Rx 18FF6221 - 8 C0 F0 00 0C C0 FF 05 FF
2 3) 0.318 4 Rx 01FB - 8 02 30 00 C0 00 00 00 80
3 4) 0.484 7 Rx 02FA - 8 88 13 88 13 00 88 13 01
我正在尝试为此文件编写我的第一个解析脚本;
;$FILEVERSION=1.3
;$STARTTIME=44512.7163933106
;
;-------------------------------------------------------------------------------
; Bus Name Connection Protocol Bit rate
; 1 Connection1 Untitled6@_usb CAN 250 kbit/s
; 2 Connection2 Untitled5@_usb CAN 500 kbit/s
; 3 Connection3 Untitled1@_usb J1939 500 kbit/s
; 4 Connection4 Untitled2@_usb CAN 250 kbit/s
; 5 Connection5 Untitled3@_usb CAN 250 kbit/s
; 6 Connection6 Untitled7@_usb J1939 250 kbit/s
; 7 Connection7 Single@_usb CAN 250 kbit/s
;-------------------------------------------------------------------------------
; Message Number
; | Time Offset (ms)
; | | Bus
; | | | Type
; | | | | ID (hex)
; | | | | | Reserved
; | | | | | | Data Length Code
; | | | | | | | Data Bytes (hex) ...
; | | | | | | | |
; | | | | | | | |
;---+-- ------+------ +- --+-- ----+--- +- -+-- -+ -- -- -- -- -- -- --
1) 0.015 7 Rx 047A - 6 88 13 AD 92 11 00
2) 0.093 5 Rx 18FF6221 - 8 C0 F0 00 0C C0 FF 05 FF
3) 0.318 4 Rx 01FB - 8 02 30 00 C0 00 00 00 80
4) 0.484 7 Rx 02FA - 8 88 13 88 13 00 88 13 01
该文件是通过 CAN 从车辆记录的数据,我正在尝试使用 python 读取此文件,以免我不得不使用另一个缓慢且过时的应用程序。
如何以 pandas 可以处理数据的方式将其读入 python?
我是 python 的新手,也是解析文件的新手,非常感谢任何方向。
如果您的文件具有固定的列长度,请使用 read_fwf
:
widths = [8, 14, 3, 6, 9, 3, 5, 9999]
names = ['Message Number', 'Time Offset (ms)', 'Bus', 'Type', 'ID (hex)',
'Reserved', 'Data Length Code', 'Data Bytes (hex)']
df = pd.read_fwf('data.txt', index_col=None, comment=';',
header=None, widths=widths, names=names)
输出:
>>> df
Message Number Time Offset (ms) Bus Type ID (hex) Reserved Data Length Code Data Bytes (hex)
0 1) 0.015 7 Rx 047A - 6 88 13 AD 92 11 00
1 2) 0.093 5 Rx 18FF6221 - 8 C0 F0 00 0C C0 FF 05 FF
2 3) 0.318 4 Rx 01FB - 8 02 30 00 C0 00 00 00 80
3 4) 0.484 7 Rx 02FA - 8 88 13 88 13 00 88 13 01