#!/usr/bin/env python3 from argparse import ArgumentParser from time import sleep import pandas as pd import csv from datetime import datetime import math if __name__ == "__main__": parser = ArgumentParser() parser.add_argument("-f", "--file", required=True, help="NMEA file.") args = parser.parse_args() epoch = datetime.utcfromtimestamp(0) outputfile = open(args.file.replace("nmea", "csv"), "w") writer = csv.writer(outputfile, delimiter=",", lineterminator="\n") writer.writerow( ["datetime", "time_epoch", "latitude", "longitude", "speed (knots)", "systime_epoch"] ) csv_string = "" for line in open(args.file, "r").readlines(): if line.startswith("$GPRMC"): row = line.split(",") time = row[1] lat = row[3] lat_direction = row[4] lon = row[5] lon_direction = row[6] speed = row[7] date = row[9] systime_epoch = row[13] if len(row) < 14 else 0 date_and_time = datetime.strptime(date + " " + time, "%d%m%y %H%M%S.%f") time_since_epoch = date_and_time.timestamp() date_and_time = date_and_time.strftime("%y-%m-%d %H:%M:%S.%f") # [:-3] lat = round(math.floor(float(lat) / 100) + (float(lat) % 100) / 60, 6) if lat_direction == "S": lat = lat * -1 lon = round(math.floor(float(lon) / 100) + (float(lon) % 100) / 60, 6) if lon_direction == "W": lon = lon * -1 writer.writerow([date_and_time, time_since_epoch, lat, lon, speed, systime_epoch]) outputfile.close() sleep(1) gps_df = pd.read_csv(args.file.replace("nmea", "csv")) #gps_df["datetime"] = pd.to_datetime( # gps_df["systime_epoch"].apply(lambda x: datetime.fromtimestamp(x)) #) gps_df.to_csv(args.file.replace("nmea", "csv"))