如何在 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.find
,如 str.find
,returns 它找到的第一个匹配字符的起始索引。
第一个比较有效,因为您在索引 0 处有 \xfe
,将 imei
确实放在索引 1 处。
剩余的比较不起作用,因为 ccid_
在第二行的索引 0,而不是索引 1。
如果你想要一个 bool
指示一个 bytes
是否出现在另一个中,而不真正关心索引,请改用 in
运算符,例如:
if CCID in data:
如果你真的关心索引,你可以检查 find
returns 非负数,因为它 returns -1
如果找不到该项目:
if data.find(CCID) >= 0:
您最后的选择是使用异常处理。如果您想要假设 CCID 必须在您的数据中并且其他任何东西都非常异常,那么这只是一个真正的好方法。 index
方法类似于 find
,除了它引发错误而不是返回 -1
:
try:
i = data.index(ccid)
# ok, index found
except IndexError:
# not ok
如何在串行字节数据中找到以换行符结尾的子串。我只想从 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.find
,如 str.find
,returns 它找到的第一个匹配字符的起始索引。
第一个比较有效,因为您在索引 0 处有 \xfe
,将 imei
确实放在索引 1 处。
剩余的比较不起作用,因为 ccid_
在第二行的索引 0,而不是索引 1。
如果你想要一个 bool
指示一个 bytes
是否出现在另一个中,而不真正关心索引,请改用 in
运算符,例如:
if CCID in data:
如果你真的关心索引,你可以检查 find
returns 非负数,因为它 returns -1
如果找不到该项目:
if data.find(CCID) >= 0:
您最后的选择是使用异常处理。如果您想要假设 CCID 必须在您的数据中并且其他任何东西都非常异常,那么这只是一个真正的好方法。 index
方法类似于 find
,除了它引发错误而不是返回 -1
:
try:
i = data.index(ccid)
# ok, index found
except IndexError:
# not ok