Writing into CSV file using python

僤鯓⒐⒋嵵緔 提交于 2019-12-12 00:22:43

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!