【问题标题】:Save sensor data in CSV file by using Raspberry pi3使用 Raspberry pi3 将传感器数据保存在 CSV 文件中
【发布时间】:2018-05-14 04:04:03
【问题描述】:

您能否帮我检查一下我的以下 python 代码对于通过 raspberry pi3 以 csv 格式保存数据是否正确?

print("Gyro: %f, %f, %f  [deg/s]" % (cgx, cgy, cgz))
print("Accel: %f, %f, %f  [Gs]" % (cax, cay, caz))
print("Mag: %f, %f, %f  [gauss]" % (cmx, cmy, cmz))

file = open("/home/pi/data_log.csv", "a")

if os.stat("/home/pi/data_log.csv").st_size == 0:
    file.write("Time,Gyro,Accel,Mag\n")

while True:
    now = datetime.now())
    print >>f,("%s,%f,%f,%f,%f,%f,%f,%f,%f"%(now.datetime("%Y-%m-%d %H:%M:%S"),cgx,cgy,cgz,cax,cay,caz,cmx,cmy,cgz))
            file.flush()
            time.sleep(5)
    file.close()

【问题讨论】:

  • 考虑一下您是打算一直打开文件,还是在每次迭代时打开并关闭它。
  • 您在顶部只open()ing 文件一次,但在永恒循环中close()ing 多次。我也不明白print >>f 部分。

标签: python csv raspberry-pi3 sensors


【解决方案1】:

以下类型的方法应该可以帮助您入门。您虽然缺少更新变量的代码,但目前它会导致每 5 秒写入一次相同的值:

from datetime import datetime
import csv
import os

print("Gyro: {}, {}, {}  [deg/s]".format(cgx, cgy, cgz))
print("Accel: {}, {}, {}  [Gs]".format(cax, cay, caz))
print("Mag: {}, {}, {}  [gauss]".format(cmx, cmy, cmz))

filename = "/home/pi/data_log.csv"
write_header = not os.path.exists(filename) or os.stat(filename).st_size == 0

with open(filename, "a", newline="") as f_output:
    csv_output = csv.writer(f_output)

    if write_header:
        csv_output.writerow(["Time", "Gyro", "Accel", "Mag"])

    while True:
        row = [datetime.now().strftime("%Y-%m-%d %H:%M:%S"), cgx, cgy, cgz, cax, cay, caz, cmx, cmy, cgz]
        csv_output.writerow(row)
        time.sleep(5)

Python 的 CSV 库可用于将值列表转换为自动正确分隔的行。默认情况下,分隔符是逗号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-03
    • 2022-01-15
    • 2021-01-31
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多