我相信你会看到很多,但只是想警告你,我对编码仍然很陌生并且需要学习很多东西。每当我有时间的时候,我一直在尝试通过个人项目和youtube进行自学。
长版本:当我使用split函数时总是出错,但我仍然得到一个值。基本上我的功能应该是采用角度或度数,以度数分钟“秒”或例如“N 38°43'23 \”E“到十进制数。我利用小于90度的轴承来使用索引来查找字符串中的数字来转换角度。然而,如果角度不是一个方位,我想不出一种方法可以计算出数度将数量拉出多少十几个位置,所以我尝试将它分成度数符号。但是,当它执行此操作时,它会返回一个错误,指出split()需要非空模式匹配。这是什么意思?代码仍然有效,但始终会返回此错误。
简短版:这是我的代码:
def decimal(x): # converts degrees-minutes-seconds to decimal
dms = list(x)
if dms[0] == 'N' or dms[0] == 'S':
degrees = ((int(dms[2]) * 10) + int(dms[3]))
minutes = ((int(dms[-8]) * 10) + int(dms[-7])) / 60
seconds = ((int(dms[-5]) * 10) + int(dms[-4])) / 3600
else:
placeholder = re.split(r'\u00b0*', x)
degrees = int(placeholder[0])
minutes = ((int(dms[-6]) * 10) + int(dms[-5])) / 60
seconds = ((int(dms[-3]) * 10) + int(dms[-2])) / 3600
return degrees + minutes + seconds
当我运行它时,我得到十进制数,但我也得到:
FutureWarning: split() requires a non-empty pattern match.
return _compile(pattern, flags).split(string, maxsplit)
我已经查看了有关此错误的其他问题,但没有解释说明要采取哪些措施来避免这种情况,或错误的真正含义。感谢您的任何帮助。此外,您所看到的任何建议或更正都将非常感谢!
答案 0 :(得分:2)
你拥有的不是错误,而是警告。
首先,我认为你不应该使用原始字符串,你需要'\u00b0'
这个字符。并且'c*'
将匹配c
中的0个或更多个,因此它与空字符串匹配。我相信这就是警告的内容。我建议你使用
re.split('\u00b0', x)
甚至更好,只是
x.split('\u00b0')
答案 1 :(得分:1)
由于您使用的是正则表达式,因此您可以使用单个正则表达式解析整个字符串,并利用分组:
import re
def decimal_alt(x):
REGEX = re.compile( u"([NS])\\s(\\d+)\u00B0(\\d+)\'(\\d+)\"")
rm = REGEX.match(x)
if rm is not None:
sign = -1 if rm.group(1) == 'S' else +1
d = float(rm.group(2))
m = float(rm.group(3)) / 60.0
s = float(rm.group(4)) / 3600.0
return sign * ( d + m + s )
与
一起使用时print decimal_alt(u"N 38\u00B040'20\"")
打印
38.6722222222