2017-11-30 3 views
0

Könnten Sie mir helfen, zu überprüfen, ob mein Python-Code für das Speichern von Daten im CSV-Format über Raspberry Pi3 korrekt ist?Speichern Sie Sensordaten in CSV-Datei mit Raspberry pi3

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() 
+0

Denken Sie darüber nach, ob Sie die Datei ständig geöffnet halten oder sie bei jeder Iteration öffnen und schließen möchten. –

+0

Sie öffnen die Datei nur einmal am Anfang, aber schließen sie mehrmals in der ewigen Schleife. Auch ich verstehe den 'print >> f' Teil nicht. –

Antwort

1

Der folgende Ansatz sollte Ihnen den Einstieg erleichtern. Sie fehlen allerdings Code Ihre Variablen zu aktualisieren, so dass im Moment ist es in den gleichen Werten führen würde alle 5 Sekunden geschrieben werden:

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) 

Pythons CSV-Bibliothek kann eine Liste von Werten in einer Reihe zu konvertieren verwendet werden, die wird automatisch korrekt abgegrenzt. Standardmäßig ist das Trennzeichen ein Komma.

Verwandte Themen