读取输入数据到csv文件
Read input data to csv file
我正在做一个测量传感器温度的 BeagleBone 项目。我想将数据保存到 CSV 文件中。我是编程新手,Python,我有点迷路。我已经 google 搜索了一段时间,但几乎没有找到可以帮助我的东西。所以我想问问这个。如何每秒将新数据写入CSV文件?
import Adafruit_BBIO.ADC as ADC
import time
import csv
sensor_pin = 'P9_40'
ADC.setup()
while True:
reading = ADC.read(sensor_pin)
millivolts = reading * 1800 # 1.8V reference = 1800 mV
temp_c = (millivolts - 500) / 10
temp_f = (temp_c * 9/5) + 32
print('mv=%d C=%d F=%d' % (millivolts, temp_c, temp_f))
time.sleep(1)
# field names
fields = ['Milivolts', 'Celsius']
# data rows of csv file
rows = [ [millivolts,"|", temp_c]]
# name of csv file
filename = "textfile.csv"
# writing to csv file
with open(filename, 'w') as csvfile:
# creating a csv writer object
csvwriter = csv.writer(csvfile)
# writing the fields
csvwriter.writerow(fields)
# writing the data rows
csvwriter.writerows(rows)
要应用的一个修复是在 append 模式下打开文件,这样文件内容就不会在每一步都被覆盖;只需将这一行中的 'w'
更改为 'a'
:
with open(filename, 'a') as csvfile:
请注意,如果没有任何输出and/or描述您遇到的问题,将很难为您提供更多帮助。
老实说,除了顺序之外,我没发现代码有什么问题。
按照你写的方式,每次迭代循环时,你都会以写入模式打开文件,这会擦除文件。因此,如果我猜对了,您的 CSV 文件中可能只有一行。
下面只是重新排序,应该可以。请注意,我将字段放在循环之前,因为您只需要它一次。
请记住,每次您 运行 程序都会启动一个新的 csv。如果您希望它保留历史记录而不管中断/重新启动,只需删除字段,然后改用 open(filename, 'a')
。
由于这是数据内容,如果您要进行很长时间,您可能希望将 time.time()
作为每一行的一部分。这样你就可以看到停机时间等。
import Adafruit_BBIO.ADC as ADC
import time
import csv
sensor_pin = 'P9_40'
ADC.setup()
# name of csv file
filename = "textfile.csv"
with open(filename, 'w') as csvfile:
# creating a csv writer object
csvwriter = csv.writer(csvfile)
# writing the fields
csvwriter.writerow(['Milivolts', 'Celsius'])
while True:
reading = ADC.read(sensor_pin)
millivolts = reading * 1800 # 1.8V reference = 1800 mV
temp_c = (millivolts - 500) / 10
temp_f = (temp_c * 9/5) + 32
# writing the data rows
rows = [ [millivolts,"|", temp_c]]
csvwriter.writerows(rows)
time.sleep(1)
我正在做一个测量传感器温度的 BeagleBone 项目。我想将数据保存到 CSV 文件中。我是编程新手,Python,我有点迷路。我已经 google 搜索了一段时间,但几乎没有找到可以帮助我的东西。所以我想问问这个。如何每秒将新数据写入CSV文件?
import Adafruit_BBIO.ADC as ADC
import time
import csv
sensor_pin = 'P9_40'
ADC.setup()
while True:
reading = ADC.read(sensor_pin)
millivolts = reading * 1800 # 1.8V reference = 1800 mV
temp_c = (millivolts - 500) / 10
temp_f = (temp_c * 9/5) + 32
print('mv=%d C=%d F=%d' % (millivolts, temp_c, temp_f))
time.sleep(1)
# field names
fields = ['Milivolts', 'Celsius']
# data rows of csv file
rows = [ [millivolts,"|", temp_c]]
# name of csv file
filename = "textfile.csv"
# writing to csv file
with open(filename, 'w') as csvfile:
# creating a csv writer object
csvwriter = csv.writer(csvfile)
# writing the fields
csvwriter.writerow(fields)
# writing the data rows
csvwriter.writerows(rows)
要应用的一个修复是在 append 模式下打开文件,这样文件内容就不会在每一步都被覆盖;只需将这一行中的 'w'
更改为 'a'
:
with open(filename, 'a') as csvfile:
请注意,如果没有任何输出and/or描述您遇到的问题,将很难为您提供更多帮助。
老实说,除了顺序之外,我没发现代码有什么问题。
按照你写的方式,每次迭代循环时,你都会以写入模式打开文件,这会擦除文件。因此,如果我猜对了,您的 CSV 文件中可能只有一行。
下面只是重新排序,应该可以。请注意,我将字段放在循环之前,因为您只需要它一次。
请记住,每次您 运行 程序都会启动一个新的 csv。如果您希望它保留历史记录而不管中断/重新启动,只需删除字段,然后改用 open(filename, 'a')
。
由于这是数据内容,如果您要进行很长时间,您可能希望将 time.time()
作为每一行的一部分。这样你就可以看到停机时间等。
import Adafruit_BBIO.ADC as ADC
import time
import csv
sensor_pin = 'P9_40'
ADC.setup()
# name of csv file
filename = "textfile.csv"
with open(filename, 'w') as csvfile:
# creating a csv writer object
csvwriter = csv.writer(csvfile)
# writing the fields
csvwriter.writerow(['Milivolts', 'Celsius'])
while True:
reading = ADC.read(sensor_pin)
millivolts = reading * 1800 # 1.8V reference = 1800 mV
temp_c = (millivolts - 500) / 10
temp_f = (temp_c * 9/5) + 32
# writing the data rows
rows = [ [millivolts,"|", temp_c]]
csvwriter.writerows(rows)
time.sleep(1)