Python: от последовательного порта Arduino до CSV-файла, почему формат данных странный? - PullRequest
0 голосов
/ 17 октября 2019

/ Я прошу прощения за мой ограниченный уровень владения английским языком, который может вызвать неясный вопрос. / Я сейчас использую python для записи данных, которые были отправлены с Arduino в CSV-файл,нужно около 200 данных в группе, одна группа для одной строки, каждый данные отдельно в разных столбцах. Данные из моего aruino имеют формат: число +, (например: 123,144,135, ....), но в CSV-файле число было разделено на разные столбцы (1,2,3 в разных столбцах вместо 123 в одномcolum), и при открытии файла путем записи заметки данные выглядят как «1,2,3», «1,4,4», .....

Я пробовал разные разделители, такие как \ t, пробел ... \ t выглядит хорошо, когда я просматривал файл в Excel, но все еще не работал в блокноте (вкладка между каждыми двумя числами). Я также пытался удалить "," в коде Arduino, но это не помогает. В функции writerows () я попробовал data, str (data) и str (data) + ",", без большой разницы. Я даже изменил настройку делитера моего ноутбука с "," на "\ t", но это не помогло.

Arduino-часть:

  Serial.print(value);
  Serial.print(",");

Python-часть:

   while True:
    try:
        ser_bytes = ser.readline()
        decoded_bytes = ser_bytes.decode('utf-8')
        print(decoded_bytes)
        #decoded_bytes = decoded_bytes.strip('|')

        with open("test_data.csv","a",newline="") as f:
            writer = csv.writer(f,delimiter=",")
            writer.writerows([str(decoded_bytes),])

Я много искал о формате CSV, но до сих пор не могу понять, почему код не работает. Спасибо за помощь.

1 Ответ

0 голосов
/ 17 октября 2019

Вы правы, я думаю, что я не совсем понял ваш вопрос, но вот несколько идей. Чтобы получить правильный вывод CSV, вы должны изменить свой код на что-то вроде этого:

while True:
try:
    ser_bytes = ser.readline()
    // the following line splits the line you got from your arduino into an array
    decoded_bytes = ser_bytes.split(",");
    print(decoded_bytes)

    with open("test_data.csv","a") as f:
        writer = csv.writer(f,delimiter=",")
        writer.writerow(decoded_bytes)

Таким образом, вы должны получить правильный вывод CSV, и каждая строка, которую вы получаете из Arduino записывается в строку в файле.

Некоторые дополнительные соображения: Поскольку вы уже получаете строку в стиле csv от своего arduino, вы уже можете записать ее в файл напрямую, без разбиения и использования средства записи csv. Это на самом деле немного излишне, но, вероятно, это не имеет большого значения;)

...