代码之家  ›  专栏  ›  技术社区  ›  danglingpointer Prasad

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

  •  0
  • danglingpointer Prasad  · 技术社区  · 6 年前

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

    Pyserial 线路。

    编辑: 这是一个打字错误没有转义序列。

    我的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
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   Mad Physicist    6 年前

    bytes.find ,就像 str.find

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

    ccid_

    如果你想要一个 bool bytes 出现在另一个中,并且不真正关心索引,使用 in 操作员,例如:

     if CCID in data:
    

    如果你真的关心索引,你可以检查一下 find 返回非负,因为它返回 -1 如果找不到项目:

    if data.find(CCID) >= 0:
    

    最后一个选项是使用异常处理。如果你想假设CCID一定在你的数据中,而其他任何东西都是不正常的,那么这才是一个真正好的方法。这个 index 方法就像 找到 ,除非它引发错误而不是返回 -1

    try:
        i = data.index(ccid)
        # ok, index found
    except IndexError:
        # not ok