数据结构:高级字符串拆分以返回列表

时间:2018-04-13 21:48:22

标签: python string list split

我正在编写一个名为

的函数

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的东西;如何提取坐标并将它们作为列表返回,给定不同长度的坐标以及初始字符串?

3 个答案:

答案 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表示以下模式:

  • 以open paren开头 - > \(
  • 有一个可选的标志 - > [+-]?
  • 有一系列数字和句点 - > [\d.]+
  • 有一个逗号和可选的空格 - > ,\s*
  • 重复数字模式 - > [+-]?[\d.]+
  • 并以close-paren \)
  • 结束

请注意,额外的括号会创建匹配的组,以后可以通过.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

您可以:

  • 拆分字符串围绕'\ n';
  • 使用纬度和经度获取最后一行;
    • 如果缺少值,返回numpy.nan ;
  • 摆脱“(”和“);
  • 等字符
  • 将结果拆分为“,”;
  • 格式值。

无需担心琴弦上的长度不同。