Что такое
x, если он нигде не используется?
Явно лишние циклы.
Присваивание p = len(y) не прервет цикл.
И вообще, последний ser.readline вызывается для каждого символа в строке.
Короче, учи регулярные выражения и функции работы со строками, чтобы такой огород не городить.
....
b = ser.readline() + ','
....
for x in b: # nachnjom rabotu s vibrannoi strokoi
....
for x in b:
...
b = ser.readline() + ','
...
b = ser.readline() + ',' # esli stroka nacinetsja ne s $GPGGA delaem perevod na sledujuschuju stroku
Должно быть что-то вроде этого:
def get_some_value( ser, timeout ):
expire = time.time() + timeout
while time.time() < expire:
line = ser.readline()
values = line.split( "," )
if values[ 0 ] == "$GPGGA":
return int( values[ 6 ] )
raise Exception( "Timeout" )