收到的列表比预期的要大

2024-09-28 22:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为gps跟踪器进行nmea处理,以这种方式将其作为一个值列表进行处理

"""
information package exmaple
41719.285,A,1623.5136,S,07132.9184,W,017.8,203.5,040613,,,A*6B|1.6|2375|1010|0000,0000|02CC000A138E96D6|11|0029560C
"""
gprmc, hdop, altitude, state, ad, baseid, csq, journey = information.split('|')
ptime, gpsindicator, lttd, ns, lgtd, ew, speed, course, pdate, dd, checksum = gprmc.split(',')

然后,有时数据包更大,但格式良好,这是因为一些客户重新配置了额外的数据设备,使我的程序崩溃,所以我正在寻找一种方法,我的代码不会崩溃在这些情况下。你知道吗


Tags: package列表information方式adgpssplitstate
3条回答

使用切片

gprmc, hdop, altitude, state, ad, baseid, csq, journey = information.split('|')[:8]
data = gprmc.split(',')
ptime, gpsindicator, lttd, ns, lgtd, ew, speed, course, pdate, dd = data[:10] 
checksum = data[-1] 

在python3.x中,可以使用通配符

gprmc, hdop, altitude, state, ad, baseid, csq, journey, *_ = information.split('|')
(ptime, gpsindicator, lttd, ns, lgtd, 
 ew, speed, course, pdate, dd, *_, checksum) = gprmc.split(',')

你的解析器太简单了。 如果在最后一个预期属性之后有一个“”,则在“”之后读取正好2个字符,即校验和。 请将其更正为“*”后正好2个字符。你知道吗

一般来说,NMEA是唯一的标准,但它没有很好的规定。 每个GPS制造商都以自己的方式解释它。 很难编写一个通用的NMEA解析器,你可以查看GPSBABLE源代码,看看他们所考虑的特殊接收器的巨大数量。你知道吗

此外,你所举的例子是无效的。 有效的NMEA句子以“$”作为第一个字符开头。 e、 g$GPRMC公司

快速解决方案:

"""
information package exmaple
41719.285,A,1623.5136,S,07132.9184,W,017.8,203.5,040613,,,A*6B|1.6|2375|1010|0000,0000|02CC000A138E96D6|11|0029560C
"""
# Unpack only the eight first values to the eight variables
gprmc, hdop, altitude, state, ad, baseid, csq, journey = information.split('|')[:8]
# Unpack only the eleven first values to the eleven variables
ptime, gpsindicator, lttd, ns, lgtd, ew, speed, course, pdate, dd, checksum = gprmc.split(',')[:11] 

当然,更好的方法是事先检查信息的有效性及其计数。你知道吗

相关问题 更多 >