繁体   English   中英

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

[英]How to find the byte data in pyserial readline in Python 3.x

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

对于您的问题的简短回答是, bytes.findstr.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM