Запись нескольких значений в строке CSV вместо перехода на следующую строку - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь перенести данные датчика из онлайн-API в файл CSV, используя библиотеку CSV. Всякий раз, когда я пытаюсь, что я получаю несколько значений, добавленных в одну строку, которая увеличивается так далее ...

['22.00'] ['71.00'] ['0.00']
['22.00', '22.00'] ['71.00', '71.00'] ['0.00', '0.00']
['22.00', '22.00','22.00'] ['71.00', '71.00','71.00'] ['0.00','0.00', '0.00']

это вывод, который я получаю. Вот мой код:

while True:
    data_temp = requests.get(temp_url).json()
    data_hum = requests.get(hum_url).json()
    data_flame = requests.get(flame_url).json()
    feilds_temp = data_temp['feeds']
    feilds_hum = data_hum['feeds']
    feilds_flame = data_flame['feeds']
    with open('testdata.csv','a') as csv_file:
        for x in feilds_temp:
            temp.append(x['field1'])
        for y in feilds_hum:
            humid.append(y['field2'])
        for z in feilds_flame:
            flame.append(z['field3'])
        csv_write = csv.DictWriter(csv_file, fieldnames= fieldnames)
        data = {
            "temperature": temp,
            "humidity": humid,
            "flame": flame
        }
        csv_write.writerow(data)
        print(temp, humid, flame)
    time.sleep(15)

1 Ответ

2 голосов
/ 25 января 2020

Вы не очищаете списки каждый раз через l oop, поэтому вы добавляете к предыдущим значениям.

Используйте списочные выражения для создания списков fre sh каждый раз, вместо этого добавления.

while True:
    data_temp = requests.get(temp_url).json()
    data_hum = requests.get(hum_url).json()
    data_flame = requests.get(flame_url).json()
    feilds_temp = data_temp['feeds']
    feilds_hum = data_hum['feeds']
    feilds_flame = data_flame['feeds']
    with open('testdata.csv','a') as csv_file:
        temp = [x['field1'] for x in feilds_temp]
        hum = [x['field2'] for x in feilds_hum]
        flame = [x['field3'] for x in feilds_flame]
        csv_write = csv.DictWriter(csv_file, fieldnames= fieldnames)
        data = {
            "temperature": temp,
            "humidity": humid,
            "flame": flame
        }
        csv_write.writerow(data)
        print(temp, humid, flame)
    time.sleep(15)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...