【发布时间】:2017-10-30 13:46:04
【问题描述】:
我正在尝试让我的 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)
我得到的错误是:interable expected, not int 所以第一个数据值存储在我假设的 int 中?
我习惯于在 java 中定义类型,但在这里你只需键入变量,嗯,是的。
我尝试了 writer.writerow(sensorData) 并且它可以正常工作,但正如您可能已经预料到的那样,它只写入一行数据。
其余代码在 while true 循环中运行,它不断将数据存储到列表中。
如何让这个函数继续写入我的 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 中的内容
【问题讨论】:
-
我们可以看看你的
getSensorData()函数吗? -
IIUC,问题是您以写入模式打开文件
w,这会完全擦除所有现有内容。您应该以附加模式打开。看来getSensorData()将返回一个int,因此每次调用该方法时,都需要writerow该值。 -
好的,所以
writerows期望您传递一个嵌套列表,其中每个内部列表代表一行。如果您传递一个列表,它将在索引 0 处找到一个 int 值,而实际上它期望一个表示第一行的列表。这就是错误的来源。你应该使用writerow。这是我之前评论的补充;每次打开文件时,您都需要追加模式以不覆盖以前的数据。 -
@roganjosh 你应该把它放在答案中
标签: python csv raspberry-pi raspbian