编写了一个Python代码来检索坐标并将其写入csv文件中,生成的坐标是空的,甚至没有添加标题

编写了一个Python代码来检索坐标并将其写入csv文件中,生成的坐标是空的,甚至没有添加标题,python,csv,logging,raspberry-pi,gps,Python,Csv,Logging,Raspberry Pi,Gps,我使用了一个通过GPS芯片检索坐标的代码,并将其写入csv文件。csv文件已生成,但每次运行时都为空。这是我第一次用Python编写代码,所以我无法真正理解这个问题 代码如下: from time import sleep, strftime, time import serial import pynmea2 import datetime from csv import writer #setup the serial port to which gps is connected por

我使用了一个通过GPS芯片检索坐标的代码,并将其写入csv文件。csv文件已生成,但每次运行时都为空。这是我第一次用Python编写代码,所以我无法真正理解这个问题

代码如下:

from time import sleep, strftime, time
import serial
import pynmea2
import datetime
from csv import writer

#setup the serial port to which gps is connected 
port = "/dev/ttyS0"
ser = serial.Serial(port, baudrate = 9600, timeout = 0.5)
dataout  = pynmea2.NMEAStreamReader()
counter = 0

def get_sense_data():
    while True:
        newdata = ser.readline()
        if newdata[0:6] == '$GPGGA':
            parsed_line = pynmea2.parse(newdata)
            latitude_reading = parsed_line.latitude
            alpha = latitude_reading
            longitude_reading = parsed_line.longitude
            beta = longitude_reading
            sense_data=[]
            sense_data.append(counter)
            sense_data.append(datetime.datetime.now())
            sense_data.append(alpha)
            sense_data.append(beta)
            return sense_data

with open('GPSdata.csv', 'w+') as f:
    data_writer = writer(f)
    data_writer.writerow(['Term No.','Date and Time','Latitude','Longitude'])
    while True:
        data = get_sense_data()
        data_writer.writerow(data)
        counter = counter + 1

我还尝试稍微更改缩进,但是csv文件仍然是空的

您的代码看起来通常是正确的,但是由于您从未在无限while循环中关闭或刷新文件,因此文件的写入速度可能非常慢,以至于尚未刷新到磁盘

下面是代码的简化版本,添加了刷新。如果不停止运行此脚本并查看CSV内容,您将看到它每秒添加一行。删除刷新,它可能会在很长一段时间内为空…至少在操作系统决定是时候将缓冲区刷新到磁盘本身之前是这样

#!python2
from csv import writer
import time

counter = 0

with open('GPSdata.csv', 'wb') as f:
    data_writer = writer(f)
    data_writer.writerow(['Term No.','Date and Time','Latitude','Longitude'])
    while True:
        time.sleep(1)
        data = [counter,2,3,4]
        data_writer.writerow(data)
        print(data)
        f.flush()
        counter = counter + 1

您的代码看起来通常是正确的,但由于您从未在无限while循环中关闭或刷新文件,因此文件的写入速度可能非常慢,以至于尚未刷新到磁盘

下面是代码的简化版本,添加了刷新。如果不停止运行此脚本并查看CSV内容,您将看到它每秒添加一行。删除刷新,它可能会在很长一段时间内为空…至少在操作系统决定是时候将缓冲区刷新到磁盘本身之前是这样

#!python2
from csv import writer
import time

counter = 0

with open('GPSdata.csv', 'wb') as f:
    data_writer = writer(f)
    data_writer.writerow(['Term No.','Date and Time','Latitude','Longitude'])
    while True:
        time.sleep(1)
        data = [counter,2,3,4]
        data_writer.writerow(data)
        print(data)
        f.flush()
        counter = counter + 1

导入操作系统
打印(os.path.exists('GPSdata.csv'))
如何将其集成到这段代码中,csv库符号在这里不一样吗。(很抱歉,我对此一无所知,因此需要更多的解释)
import os
print(os.path.exists('GPSdata.csv'))
我如何将其集成到这段代码中,csv库符号在这里不一样吗。(很抱歉,我现在完全不知道,所以需要更多的解释)该文件已创建,但其中未存储任何数据,即使是headers@Ajdar您是否在代码中添加了writerow之后的刷新?你有没有试过我的例子,有没有冲水?您的代码可能存在其他问题,但这不是一个问题。请在代码中添加一些打印行,以查看它是否正确循环并接收数据。但是,您肯定需要刷新。在数据中添加打印,数据将正确接收。问题是在文件中写入。我使用了你例子的精确副本。我遇到了一些错误1。)换行符=“”遇到语法错误,因此必须将其删除。而代码的其余部分则很好。但文件还是被删除了empty@Ajdar那么您使用的是Python2。我已经更新了Python 2的示例。试试看。不要将其集成到您的代码中
newline=''
是在Python 3中打开
csv
文件的正确用法<代码>'wb'是Python 2的正确用法。如果为True:
get\u sense\u data()
中的
循环,您确定自己没有被困在
中吗?如果您甚至没有获取头文件,那么代码就没有到达flush()。文件已生成,但其中没有存储任何数据,即使是headers@Ajdar您是否在代码中添加了writerow之后的刷新?你有没有试过我的例子,有没有冲水?您的代码可能存在其他问题,但这不是一个问题。请在代码中添加一些打印行,以查看它是否正确循环并接收数据。但是,您肯定需要刷新。在数据中添加打印,数据将正确接收。问题是在文件中写入。我使用了你例子的精确副本。我遇到了一些错误1。)换行符=“”遇到语法错误,因此必须将其删除。而代码的其余部分则很好。但文件还是被删除了empty@Ajdar那么您使用的是Python2。我已经更新了Python 2的示例。试试看。不要将其集成到您的代码中
newline=''
是在Python 3中打开
csv
文件的正确用法<代码>'wb'
是Python 2的正确用法。如果为True:
get\u sense\u data()
中的
循环,您确定自己没有被困在
中吗?如果您甚至没有得到头,那么您的代码就没有达到flush()。