2017-01-27 42 views
0

我需要將格式爲gg°mm"ss'的座標數據轉換爲十進制格式。 我在模塊的開頭使用# -*- coding: utf-8 -*- #轉換度(度)字符gg°mm''ss'數據

在原文件中的數據線:

06:58 15:07:26 -53°08'00.7" -70°51'27.5" 2404.1 746.1 -2.4 22.3 0.3675 

當文件被處理並消除空格和寫其他與取景器行是:

06:58 15:07:26 -53∞08'00.7" -70∞51'27.5" 2404.1 746.1 -2.4 22.3 0.3765 

我需要轉換-53°08'00.7"爲十進制格式-gg,ddddd。 但我不明白,因爲在Spyder中是正確的,但沒有發現。任何提示? 這是部分代碼:

if os.path.exists(name): 
    with open(name, 'r', encoding="utf-8", errors="surrogateescape") as f: 
     for line in itertools.islice(f, 2, None): # start=2, stop=None 
      if not '//' in line: 
       linea1 = re.sub('[ \t]+' , ' ', line) 
       signo = linea1.find('-',0,6) 
       if signo == -1 : 
        file_mov.write(linea1) 
+3

請加在Python中盡最大努力的源代碼,您似乎已經習慣(與和輸出),後者制定明確的,缺什麼,以一個完美的出來放。這將有助於幫助你的國際海事組織。 – Dilettant

+0

你有什麼錯誤?不知道'-gg,ddddd'是什麼意思 - 你想要的輸出是什麼? – RobertB

回答

1

查看是否存在以下幫助。這不是優雅的,但它應該給你一個關於正在發生的事情的好主意。

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 

import re 

degree_sym = u'\N{DEGREE SIGN}' 
sample = u' 06:58 15:07:26 -53\N{DEGREE SIGN}08\'00.7" -70\N{DEGREE SIGN}51\'27.5" 2404.1 746.1 -2.4 22.3 0.3675' 

regex = r'(-?)(\d+)'+ degree_sym + r"(\d+)'" + r'(\d+|\d+\.\d+)"' 

converted_words = [] 

for word in sample.split(): 
     m = re.match(regex, word, flags=re.UNICODE) 
     if m: 
       sign = int(m.groups()[0]+'1') 
       degrees = float(m.groups()[1]) 
       minutes = float(m.groups()[2])/60.0 
       seconds = float(m.groups()[3])/3600.0 
       result = "{0:.5f}".format(sign*(degrees+minutes+seconds)) 
       converted_words.append(result) 
     else: 
       converted_words.append(word) 
answer = " ".join(converted_words) 
print(answer) 

輸出:

06:58 15:07:26 -53.13353 -70.85764 2404.1 746.1 -2.4 22.3 0.3675 
+0

謝謝...我會盡力的 – Istari