将列表中的数据连续写入 CSV 文件
Continuously write data from a list into a CSV file
我正在尝试让我的 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 中的内容
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])
我正在尝试让我的 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 中的内容
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])