如何在Python 3.x中找到pyserial readline中的字节数据

问题描述 投票:1回答:1

如何查找换行符终止的串行字节数据中的子字符串。我只是想从uart流中提取数据。

无法在Pyserial行中找到字节数据。

我能找到imei的第一行,但是第二行却找不到我试过的几种方式吗?

编辑:这是一个错字没有逃脱序列。

我的UART流中的输出:

b'\xfeimei_1234567777777\n'
b'ccid_123123324234234234324\n'

任何帮助非常感谢。

最小代码示例:

IMEI=b'imei_'

CCID=b'ccid_'
ccid = b'ccid_123123324234234234324\n'
XFIND_CCID=b'ccid_12'
OCCID=b'12'

#Here open the serial connection
run = True
while run:
  data=device.readline()
  print(data)

  #It works for this well without any issue.
  if data.find(IMEI) == 1:
      v_imei = data
      print(imei)

  #None of the method works
  #Method 1
  if data.find(CCID) == 1:
      ccid = data
      print(ccid)

  #Method 2
  if data.find(ccid) == 1:
      v_ccid = data
      print("Hurray we found the CCID %s" % v_ccid)

  #Method 3
  if data.find(OCCID) == 1:
      v_ccid = data
      print("OCCID we found the CCID %s" % v_ccid)


  #Method 4
  if data.find(XFIND_CCID) == 1:
      print("XX Hurray we found the CCID")

  if data == "end"
      run = False
python arrays python-3.x pyserial
1个回答
2
投票

对你的问题的简短回答是bytes.findstr.find一样,返回它找到的第一个匹配字符的起始索引。

第一个比较是有效的,因为你在索引0处有\xfe,确实将imei放在索引1处。

剩下的比较不起作用,因为ccid_在索引0处,而不是第二行中的索引1。

如果你想要一个bool来表明一个bytes是否出现在另一个中,并且并不真正关心索引,请使用in算子,例如:

 if CCID in data:

如果你真的关心索引,你可以检查find是否返回非负数,因为如果找不到该项,它会返回-1

if data.find(CCID) >= 0:

您的最终选择是使用异常处理。如果你想假设CCID必须在你的数据中而其他任何东西都是非常不正常的,那么这只是一个很好的方法。 index方法就像find,除了它引发错误而不是返回-1

try:
    i = data.index(ccid)
    # ok, index found
except IndexError:
    # not ok
© www.soinside.com 2019 - 2024. All rights reserved.