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



我正在编写一个名为

get_coords(item(,它将数据文件中位置 1 列的预期格式的单个字符串作为输入。该函数应返回一个包含两个条目的列表:纬度和经度作为浮点值。如果缺少纬度和经度,则应返回 numpy.nan (NaN( 以指示缺少的值。

成功实现的示例是:

text = '1533 Bridle Creek BlvdnVirginia Beach, VA 23464-7907n(36.787392, -76.15761)'
print(get_coords(text))
[36.787392, -76.15761]

我觉得我需要使用某种形式的字符串拆分,但是,经度和纬度坐标可以有不同的长度,这让我觉得我需要使用 re 模块之类的东西并使用类似 re.search 的东西; 如何提取坐标并将它们作为列表返回,给定不同长度的坐标以及初始字符串?

看起来坐标总是在最后一行。如果是这种情况,我们可以执行以下操作:

coords_str = text.splitlines()[-1]

获取最后一行。

由于一个幸运的巧合,坐标的格式似乎与python元组完全相同。 正因为如此,我们可以使用 ast 模块将其转换为 Python 元组:

import ast
ast.literal_eval(coords_str)

如果要使用 re ,这里有一个模式:

return list(map(float, re.search(r'(([+-]?[d.]+),s*([+-]?[d.]+))', text).groups()))

简而言之,re.search以下模式

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

请注意,额外的括号创建匹配的组,稍后可由.groups()调用查询。

你可以使用这样的东西:

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

您可能会:

  • 将字符串拆分为"">;
  • 获取带有纬度和经度的最后一行;
    • 如果缺少值,则返回 numpy.nan;
  • 去掉像"("和"(">这样的字符;
  • 将结果拆分为",">;
  • 设置值的格式

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

最新更新