问题
Here some simple code I have written. Data is not accumulated in the CSV file; can someone share code to read data from serial port and log this to a CSV file?
import serial
import csv
import string
import os
import time
import sys
def main():
pass
if __name__ == '__main__':
main()
count=0
f=open("test.txt","w+");
result = csv.writer(f,delimiter=',', dialect='excel-tab')
result_statememt=("date","zenith","elevation","azimuth","conv_elevation");
result.writerow(result_statememt)
f.close()
while(count<10):
#time.sleep(60)
ser=serial.Serial()
ser.port=3
ser.baudrate=9600
ser.open()
str=ser.read(50)
val=str.split(":")
lines=str.split("\r\n")
count=count+1
print count
f=open("test.txt","a+")
result=csv.writer(f,delimiter=',')
result.writerow()
f.close()
f.close()
ser.close()
回答1:
As noted, since you're not passing anything to result.writerow()
nothing is being written to the CSV file. But I'm also concerned that you're reading 50 bytes at a time from the serial port, then splitting it on the :
character and then splitting it on a \r\n
delimiter. I don't think this is going to do what you want.
My guess is that you are expecting the serial port to deliver lines terminated by \r\n
, each line consisting of a set of fields separated by :
, and you want to write these fields to a CSV file. I'd recommend trying something like this instead:
with open("test.txt", "wb") as output_file:
csv_out = csv.writer(output_file, delimiter=',', dialect='excel-tab')
csv_out.writerow("date","zenith","elevation","azimuth","conv_elevation")
ser=serial.Serial(port=3, baudrate=9600, timeout=60)
ser.open()
for count in range(10):
str = ser.readline().rstrip()
csv_out.writerow(str.split(':'))
ser.close()
I haven't used the Python serial
module and don't currently have hardware to test this, but based on my reading of the module documentation this should be closer to what you want to do. I think the read timeout is measured in seconds, so this will time out if the serial port doesn't produce any data for one minute.
回答2:
import serial
import csv
import string
import os
import time
import sys
def main():
pass
if __name__ == '__main__':
main()
ser=serial.Serial()
ser.port=2
print ser.port
ser.baudrate=9600
with open("test.csv", "wb") as output_file:
csv_out = csv.writer(output_file, delimiter=',', dialect='excel-tab')
C_statememt=("date","time","Zenith","Azimuth","Elevation","conv_elevation");
ser.open()
for count in range(10):
str = ser.readline().rstrip()
C_statememt.writerow(str.split(':'))
ser.close()
error report:
2
Traceback (most recent call last):
File "C:\Documents and Settings\Administrator\My Documents\python code\code3\module1.py", line 28, in <module>
C_statememt.writerow(str.split(':'))
AttributeError: 'tuple' object has no attribute 'writerow'
来源:https://stackoverflow.com/questions/20440337/writing-into-csv-file-using-python