我是Python的新手,在这段代码中,我正在尝试编写一个代码,该代码读取包含城市列表及其各自经度和纬度的文本文件,然后将它们作为包含列表的字典返回城市包括经度和纬度。
文本文件如下所示:
Name: Koln Latitude: 4° 45' N Longitude: 2° 55' W
Name: Amersfoort Latitude: 1° 23' N Longitude: 2° 23' E
我的代码是这样的:
import re
def controller(filename):
citydict = {}
filevar = open(filename, 'r')
for line in filevar:
city = delegate(line)
citydict[city[0]] = city
filevar.close()
return citydict
def delegate(ln):
pattern = "Name: (.*) Latitude: (.*)? (.*)' (.) Longitude: (.*)? (.*)' (.)"
matcher = re.compile(pattern)
match = matcher.search(ln)
name = match.group(1)
latitude = match.group(2), match.group(3), match.group(4)
longitude = match.group(5), match.group(6), match.group(7)
city = (name, latitude, longitude)
return city
print controller('cities.txt')
代码运行良好,但不知何故,它有奇怪的输出,如2 \ xb。任何人都知道这意味着什么以及如何解决它们?
{'Koln': ('Koln', ('4\xb0', '45', 'N'), ('2\xb0', '55', 'W')), 'Amersfoort': ('Amersfoort', ('1\xb0', '23', 'N'), ('2\xb0', '23', 'E'))}
答案 0 :(得分:1)
你的正则表达式有错误。 ?
表示匹配前一个表达式(.*)
,零或一次。
(.*)?
如果学位角总是在那里,你可以这样做:
(.*).
答案 1 :(得分:0)
它对应于unicode中的°
:
>>> print u'\xb0'
°