【问题标题】:Writing multiple values in csv row instead of going next line在 csv 行中写入多个值而不是下一行
【发布时间】:2020-01-25 09:32:21
【问题描述】:

我正在尝试使用 csv 库将传感器数据从在线 api 获取到 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)

【问题讨论】:

  • 尝试用“csv.writerows(data)”替换“csv.writerow(data)”
  • 如果这不起作用,请尝试 csv_write.writerow([data]) - 特定的 CSV 写入器将内容放在列表中
  • 不,这也不起作用。我仍然得到相同的格式

标签: python api loops csv


【解决方案1】:

您不会在每次循环中都清除列表,因此您会附加到以前的读数。

每次都使用列表推导式来创建新的列表,而不是追加。

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)

【讨论】:

  • 有什么办法可以将数据转换成整数?
  • 我不确定你的意思。 CSV 文件中没有数据类型。
  • 你的意思是去掉数字中的.00int(float(x['field1']))float() 将解析数字,然后int() 将丢弃分数。
猜你喜欢
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2015-04-24
  • 2014-12-28
  • 2016-12-10
相关资源
最近更新 更多