我正在编写一个名为
的函数get_coords(item),它将数据文件中Location 1列的预期格式的单个字符串作为输入。该函数应返回包含两个条目的列表:纬度和经度作为浮点值。如果缺少纬度和经度,则应返回numpy.nan(NaN)以指示缺失值。
成功实施的一个例子是:
text = '1533 Bridle Creek Blvd\nVirginia Beach, VA 23464-7907\n(36.787392, -76.15761)'
print(get_coords(text))
[36.787392, -76.15761]
我觉得我需要使用某种形式的字符串拆分,但是,经度和纬度坐标可以有不同的长度,这让我觉得我需要使用类似re模块的东西并使用类似re.search的东西;如何提取坐标并将它们作为列表返回,给定不同长度的坐标以及初始字符串?
答案 0 :(得分:0)
看起来坐标总是在最后一行。如果是这种情况,我们可以执行以下操作:
coords_str = text.splitlines()[-1]
获取最后一行。
由于幸运的巧合,似乎坐标的格式与python元组完全相同。因此,我们可以使用ast
模块将其转换为python元组:
import ast
ast.literal_eval(coords_str)
答案 1 :(得分:0)
如果你想使用re
,这里有一个模式:
return list(map(float, re.search(r'\(([+-]?[\d.]+),\s*([+-]?[\d.]+)\)', text).groups()))
简而言之,re.search
表示以下模式:
\(
[+-]?
[\d.]+
,\s*
[+-]?[\d.]+
\)
请注意,额外的括号会创建匹配的组,以后可以通过.groups()
调用进行查询。
答案 2 :(得分:0)
您可以使用以下内容:
def get_coords(str):
latLong = str.split('\n')[-1]
if not latLong:
return numpy.nan
latLong = latLong.replace("(","")
latLong = latLong.replace(")","")
latLongList = latLong.split(',')
latLongList = list(map(float, latLongList))
return latLongList
您可以:
无需担心琴弦上的长度不同。