2016-07-04 1 views
0

.ubx 파일 (= 입력 파일)을 구문 분석하고 싶습니다. 이 파일에는 RAW 수신자 데이터뿐만 아니라 많은 NMEA 문장이 포함되어 있습니다. 출력 파일에는 GGA 문장 중 정보 만 포함되어야합니다. .ubx 파일에 원시 메시지가 포함되지 않는 한이 작동합니다. 리더 행에 대해 에 "... myParser.py C", 25 행 :Python에서 파일을 읽음 : 오류 : 줄에 NULL 바이트가 포함되었습니다.

역 추적 (마지막으로 가장 최근 통화) : 파일이 원시 데이터를 포함하지만 경우에 나는 다음과 같은 오류가 발생합니다 오류 : 라인 이 포함되어 내 코드는 다음과 같습니다 NULL 바이트

:

내 .ubx 파일은 다음과 같습니다
import csv 
from datetime import datetime 

import math 

# adapt this to your file 
INPUT_FILENAME = 'Rover.ubx' 
OUTPUT_FILENAME = 'out2.csv' 

# open the input file in read mode 
with open(INPUT_FILENAME, 'r') as input_file: 

    # open the output file in write mode 
    with open(OUTPUT_FILENAME, 'wt') as output_file: 

     # create a csv reader object from the input file (nmea files are basically csv) 
     reader = csv.reader(input_file) 

     # create a csv writer object for the output file 
     writer = csv.writer(output_file, delimiter=',', lineterminator='\n') 

     # write the header line to the csv file 
     writer.writerow(['Time','Longitude','Latitude','Altitude','Quality','Number of Sat.','HDOP','Geoid seperation','diffAge']) 

     # iterate over all the rows in the nmea file 
     for row in reader: 
       if row[0].startswith('$GNGGA'): 

        time = row[1] 

        # merge the time and date columns into one Python datetime object (usually more convenient than having both separately) 
        date_and_time = datetime.strptime(time, '%H%M%S.%f') 

        date_and_time = date_and_time.strftime('%H:%M:%S.%f')[:-6] # 
        writer.writerow([date_and_time]) 

:

$GNGSA,A,3,16,25,29,20,31,26,05,21,,,,,1.30,0.70,1.10*10 
$GNGSA,A,3,88,79,78,81,82,80,72,,,,,,1.30,0.70,1.10*16 
$GPGSV,4,1,13,02,08,040,17,04,,,47,05,18,071,44,09,02,348,24*49 
$GPGSV,4,2,13,12,03,118,24,16,12,298,36,20,15,118,30,21,44,179,51*74 
$GPGSV,4,3,13,23,06,324,35,25,37,121,47,26,40,299,48,29,60,061,49*73 
$GPGSV,4,4,13,31,52,239,51*42 
$GLGSV,3,1,10,65,07,076,24,70,01,085,,71,04,342,34,72,13,029,35*64 
$GLGSV,3,2,10,78,35,164,41,79,75,214,48,80,34,322,46,81,79,269,49*64 
$GLGSV,3,3,10,82,28,235,52,88,39,043,43*6D 
$GNGLL,4951.69412,N,00839.03672,E,124610.00,A,D*71 
$GNGST,124610.00,12,,,,0.010,0.010,0.010*4B 
$GNZDA,124610.00,03,07,2016,00,00*79 
µb<  ¸½¸Abð½     .  SB éF é v.¥ # 1 f =•Iè , 
Ïÿÿ£Ëÿÿd¡ ¬M 0+ùÿÿ³øÿÿµj #ª ² -K* 
    ,¨ , éºJU  /) ++ f 5 .lG NL C8G  /{; „> é óK  3 — Bòl . "¿ 2  bm¡ 
    4âH ÐM X cRˆ  35 »7 Óo‡ž "*ßÿÿØÜÿÿUhQ` 
    3ŒðÿÿÂïÿÿþþûù  ÂÈÿÿñÅÿÿJX ES 
    $²I uM N:w (YÃÿÿV¿ÿÿ> =ìî  1¥éÿÿèÿÿmk³m  /?ÔÿÿÒÿÿšz+Ú  ­Ïÿÿ6ÍÿÿêwÇ\ ? ]? ˜B Aÿƒ y µbÐD‹lçtæ@p3,}ßœŒ-vAh 
    ¿M"A‚UE ôû JQý 
'wA´üát¸jžAÀ‚"Å  
)DÂï–ŽtAöÙüñÅ›A|$Å ôû/ Ìcd§ÇørA†áãì˜AØY–Ä ôû1 /Áƒ´zsAc5+_’ô™AìéNÅ ôû(¶y(,wvAFøÈV§ƒA˜ÝwE ôû$ _S R‰wAhÙ]‘ÑëžAÇ9Å  vwAòܧsAŒöƒd§Ò™AÜOÄ ôû3 kœÕ}vA;D.ž‡žAÒûàÄ @ˆ" ϬŸ ntAfˆÞ3ךA~Y2E ôû3 :GVtAæ93l)ÆšAß yE ôû4 Uþy.TwA<âƒ' ¦žAhmëC ôû" ¯4Çï ›wAþ‰Ì½6ŸAŠû¶D   ~~xI]tA<ÞÿrÁšAmHE ôû/ ÖÆ@ÈgŸsAXnþ‚†4šA'0tE ôû. ·ÈO:’ 
sA¢B†i™Aë% 
E ôû/ >Þ,À8vA°‚9êœA>ÇD ôû, ø(¼+çŠuAÆOÁ לAÈΆD 
ôû# ¨Ä-_c¯qAuÓ?]> —AÐкà ôû0 ÆUV¨ØZsA]ðÛñß™AÛ'Å  ôû, ™mv7žqAYÐ:›Ä‘—AdWxD ôû1 ûö>%vA}„ 
ëV˜A.êbE 

AÝ$GNRMC,124611.00,A,4951.69413,N,00839.03672,E,0.009,,030716,,,D*62 
$GNVTG,,T,,M,0.009,N,0.016,K,D*36 
$GNGNS,124611.00,4951.69413,N,00839.03672,E,RR,15,0.70,162.5,47.6,1.0,0000*42 
$GNGGA,124611.00,4951.69413,N,00839.03672,E,4,12,0.70,162.5,M,47.6,M,1.0,0000*6A 
$GNGSA,A,3,16,25,29,20,31,26,05,21,,,,,1.31,0.70,1.10*11 
$GNGSA,A,3,88,79,78,81,82,80,72,,,,,,1.31,0.70,1.10*17 
$GPGSV,4,1,13,02,08,040,18,04,,,47,05,18,071,44,09,02,348,21*43 
$GPGSV,4,2,13,12,03,118,24,16, 

비슷한 문제가 이미 검색되었습니다. 그러나 나는 나를 위해 일하는 해결책을 찾을 수 없었다.

나는 그런 코드로 끝났다 :
import csv 

def unfussy_reader(csv_reader): 
    while True: 
     try: 
      yield next(csv_reader) 
     except csv.Error: 
      # log the problem or whatever 
      print("Problem with some row") 
      continue 

if __name__ == '__main__': 
    # 
    # Generate malformed csv file for 
    # demonstration purposes 
    # 
    with open("temp.csv", "w") as fout: 
     fout.write("abc,def\nghi\x00,klm\n123,456") 

    # 
    # Open the malformed file for reading, fire up a 
    # conventional CSV reader over it, wrap that reader 
    # in our "unfussy" generator and enumerate over that 
    # generator. 
    # 
     with open("Rover.ubx") as fin: 
      reader = unfussy_reader(csv.reader(fin)) 
      for n, row in enumerate(reader): 
       fout.write(row[0]) 

그러나 단순히 위의 코드를 사용하여 unfuss_reader 래퍼로 읽어 단지 모든 행을 포함하는 파일을 쓸 수 없습니다.

나를 도울 수 있으면 다행입니다.

다음은 .ubx 파일을 메모장 ++ image

감사에서 어떻게 보이는지의 이미지입니다!

답변

0

나는 꽤 확신 할 수 없지만 파일은 꽤 바이너리처럼 보입니다. 해당 파일을 열어 봐야합니다.

with open(INPUT_FILENAME, 'rb') as input_file: 
+0

그래 내가 –

0

올바른 코딩 형식으로 파일을 열지 않은 것처럼 보입니다. 원시 메시지를 올바르게 읽을 수 없습니다. 이 UTF8로 인코딩 된 경우

, 당신은 코딩 옵션을 사용하여 파일을 열 필요가 :

with open(INPUT_FILENAME, 'r', newline='', encoding='utf8') as input_file 
+0

그것을 시도 .... 성공하지 ... 이미 시도 : 오류가 열려 말한다 (...)는 단지 3에 소요 인수를 최대로 넣으십시오 –

+0

다음 줄을 대신 사용 하시겠습니까? 입력란에 open (INPUT_FILENAME, 'r', encoding = 'utf8')이있는 –

0

야 다른 사람이 pyhton 코드가 작동 UBLOX .ubx 파일 의 NMEA 문장에서 읽을 수있는이 proglem이있는 경우 나를 위해 :

def read_in(): 
with open('GNGGA.txt', 'w') as GNGGA: 
    with open('GNRMC.txt','w') as GNRMC: 
     with open('rover.ubx', 'rb') as f: 
      for line in f: 
       #print line 
       if line.startswith('$GNGGA'): 
        #print line 
        GNGGA.write(line) 
       if line.startswith('$GNRMC'): 
        GNRMC.write(line) 

read_in()

관련 문제