如何在python3.x的pyserial readline中查找字节数据

2024-09-28 03:22:04 发布

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

如何在串行字节数据中找到换行终止的子字符串。我只想从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

Tags: the数据rundataif字节findmethod
1条回答
网友
1楼 · 发布于 2024-09-28 03:22:04

您的问题的简短答案是bytes.find,与str.find一样,返回找到的第一个匹配字符的起始索引。你知道吗

第一个比较之所以有效,是因为在索引0处有\xfe,而实际上将imei放在索引1处。你知道吗

其余的比较不起作用,因为ccid_位于索引0,而不是第二行的索引1。你知道吗

如果您想要一个bool来指示一个bytes是否出现在另一个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

相关问题 更多 >

    热门问题