2017-12-01 3 views
-1

Was ich tun möchte, ist eine Unterbrechung des Programms, sobald ein Zeichen mehrmals in einer Zeichenfolge in Python aufgetreten ist.Ein Zeichen mehrmals zählen

Dies wird der Ausgang I erhalten:

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, 001.328,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, 0.226,72251, N, 0' b'a 2E * \ r \ n $ GPGGA, 001.329,00, A, A * 70 \ r \ n $ GPRMC, 001.329,00, A, 0.226,72248, N, 07.635,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'

Deshalb möchte ich einmal die fünfte „b '“ stoppen auftaucht.

+0

Was versuchen Sie zu erreichen, indem Sie auf diese Weise scheinbar Byte-Strings parsen? Dies ist mit ziemlicher Sicherheit ein XY-Problem. – TemporalWolf

+1

Was hast du bisher versucht? Welchen Code hast du schon, der diese Ausgabe produziert? – Prune

+0

es ist ein Stream-Daten von einem GPS-Modul und bis jetzt konnte ich nicht finden, eine Bibliothek zu analysieren, so dass ich es auf diese Weise versuchen versucht, es zu stoppen, weil der Strom weiter kommt – GreenRunsDeep

Antwort

0

Sie können regex versuchen, die Gruppe fangen(),

Suchen Sie so etwas wie:

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) 

der anstelle von 5 Lassen Sie versuchen, wenn der zweite "b '" zeigt nach oben:

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) 

Ausgang:

["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"] 

Statt 3 können Sie 5 dort ersetzen.

0
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