将从NMEA日志文件中提取的坐标保存在CSV文件中

时间:2018-01-20 22:34:03

标签: python export-to-csv pyserial nmea

作为Python的初学者,我正在处理一项任务。任务是开发一个程序,通过虚拟端口读取NMEA日志文件:

  • 仅打印" GPGGA"线
  • 从这些" GPGGA"打印坐标(lat,lon)线
  • 在CSV文件中提取这些坐标
  • 在KML文件中提取这些坐标

我的代码是:

import serial
from pynmea import nmea
import csv

ser=serial.Serial('COM4')
ser.baudrate=4800
f = open('coord_list.csv', 'w+')
print('Waiting for data')
while True:
    try:     
        message = ser.readline().decode() 
        message = message.strip()     
           if '$GPGGA' in message:    
                print(message)
                gpgga = nmea.GPGGA()
                gpgga.parse(message)   
                lat = float(gpgga.latitude)
                lon = float(gpgga.longitude)
                print("Lat %f Long %f" % (lat, lon))
                for i in message:
                    coord_list = []
                    coord = [gpgga.latitude,gpgga.longitude]
                    coord_list.append(coord)
                    f.write(coord_list)
                    f.close()

    except KeyboardInterrupt:
        raise
ser.close()

对于前两个项目符号,示例输出如下:

Waiting for data
$GPGGA,170609.941,5335.6665,N,01021.2637,E,1,09,01.1,35.9,M,40.2,M,,*58
Lat 5335.666500 Long 1021.263700
$GPGGA,170610.941,5335.6665,N,01021.2637,W,1,09,01.1,36.0,M,40.2,M,,*5A

使用此代码我收到错误:

f.write(coord_list)
TypeError: write() argument must be str, not list   

我坚持在CSV文件下保存坐标。我无法弄清楚如何编写正确的代码来解决它。无论我尝试了什么,我都会得到另一个错误或什

1 个答案:

答案 0 :(得分:0)

问题出在你的错误上,write只接受字符串 csv格式通常以逗号分隔 所以你可以这样做:

f.write("{},{}\n".format(gpgga.latitude, gpgga.longitude))

此外,您在循环中关闭文件,但不要打开它。所以它不会在第一次循环后写入。