gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:12:42 26 4
gpt4 key购买 nike

如何查找串行字节数据中以换行符结尾的子字符串。我只是想从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 一样,返回它找到的第一个匹配字符的起始索引。

第一个比较有效,因为 \xfe 位于索引 0 处,而 imei 确实位于索引 1 处。

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

如果您想要一个 bool 指示一个字节是否出现在另一个字节中,并且并不真正关心索引,请使用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

关于python - 如何在Python 3.x中的pyserial readline中查找字节数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54690233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com