Найти - Пользователи
Полная версия: Как данную строку разделить на элементы в список
Начало » Python для новичков » Как данную строку разделить на элементы в список
1
ingfa_1981
Уважаемые форумчане. После работы данного кода:
#coding: utf-8
import datetime
import serial
import time
benning_viprymitel = serial.Serial()
benning_viprymitel.baudrate = 9600
benning_viprymitel.bytesize = 8
benning_viprymitel.stopbits = 1
benning_viprymitel.xonxoff = 0
benning_viprymitel.rtscts = 0
benning_viprymitel.timeout = 0
benning_viprymitel.port = 0
benning_viprymitel.parity=serial.PARITY_NONE
benning_viprymitel.open()
print benning_viprymitel.portstr
while True:
    benning_viprymitel.write('AB\r')
    time.sleep(2)
    stroka = benning_viprymitel.readall()
    spisok_avariy = stroka.split('\r\n')
    spisok_avariy = spisok_avariy[-3]
    spisok_avariy = spisok_avariy.split(';')
    for avariya in spisok_avariy:
        if avariya == '_VT4800':
                now_time = datetime.datetime.now()
                vremya = now_time.strftime("%d\%m\%Y %H:%M:%S")
                print u'Автоматы 48В норма. {0}'.format(vremya)
        if avariya == ' VT4800':
                now_time = datetime.datetime.now()
                vremya = now_time.strftime("%d\%m\%Y %H:%M:%S")
                print u"Срабатывание автомата 48 В. {0}".format(vremya)
        if avariya == '_FUSLOA':
                now_time = datetime.datetime.now()
                vremya = now_time.strftime("%d\%m\%Y %H:%M:%S")
                print u'Автоматы 60В норма. {0}'.format(vremya)
        if avariya == ' FUSLOA':
                now_time = datetime.datetime.now()
                vremya = now_time.strftime("%d\%m\%Y %H:%M:%S")
                print u'Срабатывание автомата 60В. {0}'.format(vremya)
        if avariya[0] == ' ':
            print avariya, ' ', vremya
получается строка на рисунке каждые 2 секунды. Возник вопрос как из нее сделать список значений? Половина значений в строке с переносом строки на новую символами /r/n, другая половина разделена символами ; точка с запятой. Во время работы установки если существует авария то она выдается в виде пробела перед значением вместо знака подчеркивания.



ingfa_1981
Забыл уточнить строка начинается с символа Q и заканчивается 5 всегда разными цифрами после _FANREC07
Singularity
JOHN_16
ingfa_1981
исходное положение - нужно получить строку от Q до тех самых последних цифр. Дальше полученную строку разбить на строки исходя из символов переноса. Пройтись по всем строкам и распарсить их как надо, в зависимости от условий.
К тому же вы не сказали в каком виде хотите список значений.
ingfa_1981
Просто элементы списка

[начиная с "UBAT 66.8 V", "UBBR 66.9 V",,,тут остальные элементы списка,,  заканчивая "_FANREC07"]
JOHN_16
s # исходная строка
l=[x for x in s.splitlines()[2:-1] ]
на генераторах это выглядело бы примерно так. Можно и в цикле последовательно. Я не вижу проблемы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB