首页 > 解决方案 > 从分隔符拆分二进制数据

问题描述

我正在尝试拆分这样的二进制数据字符串:

trama = b'1 ; 12.0073 ; NAN ; NAN\r\n919.537 ; 1082.14 ; 0\r\n0 ; 850.26 ; NAN\r\n0 ; 0 ; 0\r\n0 ; 0 ; #\r\n1 ; 11.9612 ; NAN ; NAN\r\n933.792 ; 1097.16 ; 0\r\n0 ; 846.597 ; NAN\r\n0 ; 0 ; 0\r\n0 ; 0 ; #\r\n'

我想要的是找到#分隔符,因为这意味着此时一组数据结束,因此以下是另一个不同的示例。

我要这个:

[
  ['1', '12.0073', 'NAN', 'NAN', '919.537', '1082.14', '0', '0', '850.26', 'NAN', '0', '0', '0', '0', '0'],
  ['1', '11.9612', 'NAN', 'NAN', '933.792', '1097.16', '0', '0', '846.597', 'NAN', '0', '0', '0', '0', '0']
]

现在我正在做所有这些过程:

trama = b'1 ; 12.0073 ; NAN ; NAN\r\n919.537 ; 1082.14 ; 0\r\n0 ; 850.26 ; NAN\r\n0 ; 0 ; 0\r\n0 ; 0 ; #\r\n1 ; 11.9612 ; NAN ; NAN\r\n933.792 ; 1097.16 ; 0\r\n0 ; 846.597 ; NAN\r\n0 ; 0 ; 0\r\n0 ; 0 ; #\r\n'

values = [
    i.strip().decode() for i in trama.split()
    if i.strip().decode() not in [";"]
]


a, b = [], []
for i in values:
  if i != '#':
    b.append(i)
  else:
    a.append(b)
    b = []

它有效,但我确信存在一种更简单的方法来做同样的事情。有人知道实现它的pythonic方法吗?

标签: python

解决方案


首先在# 上拆分。

trama = b'1 ; 12.0073 ; NAN ; NAN\r\n919.537 ; 1082.14 ; 0\r\n0 ; 850.26 ; NAN\r\n0 ; 0 ; 0\r\n0 ; 0 ; #\r\n1 ; 11.9612 ; NAN ; NAN\r\n933.792 ; 1097.16 ; 0\r\n0 ; 846.597 ; NAN\r\n0 ; 0 ; 0\r\n0 ; 0 ; #\r\n'

lines = trama.decode('UTF-8').split('#')

records = []

for line in lines:
    if not line.strip(): continue
    records.append([v.strip() for v in line.replace('\r\n', ';').split(';') if v.strip()])

for values in records:
    print(values)

推荐阅读