将列表中的数据连续写入CSV文件

时间:2017-10-30 13:46:04

标签: python csv raspberry-pi raspbian

我试图让我的python脚本继续写入.CSV文件,而且当涉及到python时我就是初学者。

我试图跟踪这个有类似问题但没有成功的人: Writing List of Strings to Excel CSV File in Python

我目前正在尝试保存包含温度,湿度和时间的传感器数据列表,代码目前如下所示:

def writeDataToFile():
    sensorData = []
    sensorData = getSensorData()


    with open("/home/pi/Documents/Python Projects/CSV-files/sensor_data.csv", 'w') as csv_file:
        writer = csv.writer(csv_file, delimiter=',')
        writer.writerows(sensorData)

我得到的错误是:可预期的,但不是int 所以第一个数据值存储在一个int我假设?

我已经习惯了你定义类型的java,但在这里你只需输入变量就可以了。是的。

我已经尝试过writer.writerow(sensorData)然后就可以了,但正如您可能已经预料的那样,它只会写一行数据。

其余代码在while循环中运行,它将数据保存到列表中。

如何让这个函数继续写入我的csv文件,在我的循环继续运行时添加越来越多的东西?

getSensorData函数:

def getSensorData():
    sensorData = []

    temperature = getTemperatureFromSensor()
    humidity = getHumidityFromSensor()
    time = getCurrentFormatedTimestamp()

    sensorData.append(temperature)
    sensorData.append(humidity)
    sensorData.append(time)

    return sensorData

所以我试着简单地打印出列表,它完全符合我的要求:

[29,21,' 2017-10-30 15:02:47']

[29,21,' 2017-10-30 15:02:52']

[29,22,' 2017-10-30 15:02:57']

[29,21,' 2017-10-30 15:03:02']

[28,21,' 2017-10-30 15:03:07']

[28,21,' 2017-10-30 15:03:13']

等,基本上我想要存储到csv中

1 个答案:

答案 0 :(得分:2)

csv模块的writerows方法需要一个嵌套列表,其中每个内部列表代表单行的数据。在您的情况下,传递一个平面列表,它会在第0个索引处找到int值,而不是期望第一行的内部列表。这解释了错误消息。

因此,您应该在每次调用方法时使用writerow。但是,以写入模式('w')打开文件将每次删除文件的所有内容。因此,您需要以追加模式打开文件。玩具示例:

import csv

def write_csv(data):
    with open('example.csv', 'a') as outfile:
        writer = csv.writer(outfile)
        writer.writerow(data)

for x in range(5):
    write_csv([x, x+1])