Как мне разобрать живые данные CSV с последовательного порта в Python? - PullRequest
0 голосов
/ 20 апреля 2019

Я очень новичок в python, и я пытаюсь создать программу, которая принимает живой ввод с COM-порта (подключенного к детектору ветра) и анализирует живые данные в более удобный для человека вывод. Данные, полученные в данный момент из порта, имеют формат csv:

Q,060,000.10,M,00,19

«Q» - адрес текущего узла,

«060» - направление ветра,

"000.10" - скорость ветра,

«М» - единица измерения (м / с),

«00» - это статус, а последний номер - контрольная сумма.

Мне удалось заставить python распечатывать непрерывные данные через Pyserial readline (), однако это формат по умолчанию, а это не то, что мне нужно. Я попытался использовать csv.reader для разбора и чтения кода, но, похоже, я не смог напечатать его в правильном формате. Я попытался внедрить в него csv.reader, но результаты отделяют каждый элемент как новую строку.

Это код, который у меня есть для чтения и анализа.

while True:
    data = ser.readline().decode('ascii')
    csvReader = csv.reader(data, delimiter=',')
    for row in csvReader:
        print(row)

Результат, который я получаю сейчас:

['\x02']
['Q']
['', '']
['', '']
['0']
['0']
['0']
['.']
['0']
['1']
['', '']
['M']
['', '']
['0']
['0']

Я пытаюсь получить окончательный результат, подобный следующему:

"Wind Direction is 60deg. 
Wind Speed is 0.10 m/s. 
The current status is Ok"

1 Ответ

0 голосов
/ 20 апреля 2019

Вы можете попробовать это:

while True:
    data = ser.readline().decode('ascii')
    # print(data)  # uncomment this line to debug the coming data
    node, direction, speed, M, status = data.split(',')

    print(f"Wind Direction is {direction} deg.") 
    print(f"Wind Speed is {speed} m/s.") 
...