Python 对一个字符进行多次计数
我想做的是,一旦一个字符在Python中的字符串中出现多次,就中断程序 这是我得到的输出: b'30,22,37293,29,26,55,30D\r\n$GPGSV,3,1,11,01,04250,03,21309,24,08,15200,10,20157,*7B\r\n$GPGSV,3,2,11,14,49062,37,16' b'8,W,001328.00,A,A*70\r\n9,26,55359,30*75\r\n$GPGSV,3,3,11,27,40170,38,31,20022,14,32,42094,35*4C\r\n$GPGLL,0226.72251,n,0' b'A*2E\r\n$GPGGA,001329.00,A,A*70\r\n$GPRMC,001329.00,A,0226.72248,n,07635.92031,W,0.008,011217,A*64\r\n$GPVTG,T,M,0.008,n,' b'2.25,1.08,1.98*0D\r\n$GPG1329.000226.72248,n,07635.92031,W,1,08,1.081769.1,M,9.8,M,,*4C\r\n$GPGSA,A,3,16,32,26,31,22,27'Python 对一个字符进行多次计数,python,micropython,Python,Micropython,我想做的是,一旦一个字符在Python中的字符串中出现多次,就中断程序 这是我得到的输出: b'30,22,37293,29,26,55,30D\r\n$GPGSV,3,1,11,01,04250,03,21309,24,08,15200,10,20157,*7B\r\n$GPGSV,3,2,11,14,49062,37,16' b'8,W,001328.00,A,A*70\r\n9,26,55359,30*75\r\n$GPGSV,3,3,11,27,40170,38,31,20022,14,
因此,我想在第五个“b”出现后立即停止。您可以尝试regex并捕获组() 你在找这样的东西吗:
import re
pattern=r"b'[0-9]+"
data="""b'30,22,37,293,29,26,55,30D\r\n$GPGSV,3,1,11,01,04,250,,03,21,309,24,08,15,200,,10,20,157,*7B\r\n$GPGSV,3,2,11,14,49,062,37,16'
b'8,W,001328.00,A,A*70\r\n9,26,55,359,30*75\r\n$GPGSV,3,3,11,27,40,170,38,31,20,022,14,32,42,094,35*4C\r\n$GPGLL,0226.72251,N,0'
b'A*2E\r\n$GPGGA,001329.00,A,A*70\r\n$GPRMC,001329.00,A,0226.72248,N,07635.92031,W,0.008,,011217,,,A*64\r\n$GPVTG,,T,,M,0.008,N,'
b'2.25,1.08,1.98*0D\r\n$GPG1329.00,0226.72248,N,07635.92031,W,1,08,1.08,1769.1,M,9.8,M,,*4C\r\n$GPGSA,A,3,16,32,26,31,14,22,27'"""
all_items=[]
track=[]
for i in data.split(','):
pr=re.search(pattern,i)
if len(track)==5:
break
else:
if pr!=None:
track.append(pr.group())
all_items.append(pr.group())
else:
all_items.append(i)
print(all_items)
如果出现第二个“b”,让我们尝试一下,而不是5:
all_items=[]
track=[]
for i in data.split(','):
pr=re.search(pattern,i)
if len(track)==2:
break
else:
if pr!=None:
track.append(pr.group())
all_items.append(pr.group())
else:
all_items.append(i)
print(all_items)
输出:
["b'30", '22', '37', '293', '29', '26', '55', '30D\r\n$GPGSV', '3', '1', '11', '01', '04', '250', '', '03', '21', '309', '24', '08', '15', '200', '', '10', '20', '157', '*7B\r\n$GPGSV', '3', '2', '11', '14', '49', '062', '37', "b'8"]
您可以在此处替换5而不是3。import re
import re
from machine import UART
uart = UART(2, 9600)
pattern=r"b'[0-9]+"
while True:
if uart.any():
data=uart.read()
all_items=[]
track=[]
for i in data.split(','):
pr=re.search(pattern,i)
if len(track)==5:
break
else:
if pr!=None:
track.append(pr.group())
all_items.append(pr.group())
else:
all_items.append(i)
print(all_items)
this would be the code apllied to my project, but I get this error:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 12, in <module>`enter code here`
TypeError: can't convert 'str' object to bytes implicitly
从机器导入UART
uart=uart(29600)
模式=r“b”[0-9]+“
尽管如此:
如果uart.any():
data=uart.read()
所有项目=[]
轨道=[]
对于数据中的i.split(','):
pr=重新搜索(模式,i)
如果len(轨道)==5:
打破
其他:
如果公关=无:
track.append(pr.group())
所有项目。追加(pr.group())
其他:
所有项目。附加(i)
打印(所有项目)
这将是应用于我的项目的代码,但我得到以下错误:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第12行,在“此处输入代码”`
TypeError:无法将'str'对象隐式转换为字节
通过以这种方式解析看似字节字符串的内容,您试图实现什么目的?这几乎肯定是一个XY问题。到目前为止,您尝试了什么?你有什么代码已经产生了这个输出?这是一个来自GPS模块的流数据,到目前为止,我还没有找到一个库来解析它,所以我想这样做,试图阻止它,因为流不断出现,使其成为原始字符串,然后将其拆分为[,],如果你在解析时遇到问题。在这之后,创建两个列表,在一个列表中添加所有元素,在另一个列表中添加if'b in word,然后在第二个列表的len穿过len 5时继续跟踪它。break the loop或sys.exit()您尝试了什么?给我们看一些代码。。。