2017-11-30 122 views
0

아래 파이썬 코드가 raspberry pi3을 통해 CSV 형식으로 데이터를 저장하는 데 올바른지 확인할 수 있습니까?라즈베리를 사용하여 CSV 파일에 센서 데이터 저장 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

파일을 항상 열어 둘지, 반복 할 때마다 열거 나 닫을 것인지 생각하십시오. –

+0

파일을 맨 위에 한 번만 열어 두지 만 영원한 루프에서는 여러 번 닫아 버리십시오(). 또한'print >> 부분을 이해하지 못합니다. –

답변

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) 

파이썬의 CSV 라이브러리는 행에 값 목록을 변환하는 데 사용할 수있는 자동으로 올바르게 구분됩니다. 기본적으로 구분 기호는 쉼표입니다.