Pergunta

Eu tenho dados geográficos que tem 14 variáveis. Os dados estão no seguinte formato:

quadname: rockport_colony_SD Resolução: 10 ULLAT: 43,625
ULLON: -97,87527466 LRLAT: 43,5
LRLON: -97,75027466 HDATUM: 27
Zmin: 361.58401489 ZMAX: 413.38400269 ZMEAN: 396.1293335 ZSIGMA: 12.36359215 PMETHOD: 5
QUADDATE: 20001001

Os dados inteiro tem muitas variáveis ??anteriores na sequência.

Como posso extrair as coordenadas ULLAT, ULLON e LRLAT a partir dos dados em três listas, de modo que os corresponde cada linha para um local?

Esta questão foi levantada pelo problema em o cargo .

Foi útil?

Solução

Algo como este trabalho possa se os dados estão todos em um arquivo de texto simples grande:

import re

data = """
QUADNAME: rockport_colony_SD RESOLUTION: 10 ULLAT: 43.625
ULLON: -97.87527466 LRLAT: 43.5
LRLON: -97.75027466 HDATUM: 27
ZMIN: 361.58401489 ZMAX: 413.38400269 ZMEAN: 396.1293335 ZSIGMA: 12.36359215 PMETHOD: 5
QUADDATE: 20001001
"""

regex = re.compile(
    r"""ULLAT:\ (?P<ullat>-?[\d.]+).*?
    ULLON:\ (?P<ullon>-?[\d.]+).*?
    LRLAT:\ (?P<lrlat>-?[\d.]+)""", re.DOTALL|re.VERBOSE)

print regex.findall(data) # Yields: [('43.625', '-97.87527466', '43.5')]

Outras dicas

Dado um StreamReader leitor chamado, isso deve dar-lhe uma lista de (float, float, float). Sugiro uma lista de 3-tuplas porque ele provavelmente vai ser mais conveniente e mais eficiente para percorrer, a menos que por algum motivo você só quer obter todos os pontos individualmente.

coords = []
reader
while line=reader.readline():

  index_ullat = line.find("ULLAT")
  if index_ullat >= 0:
    ullat = float(line[ index_ULLAT+7 : ])

    line = reader.readline()

    index_ullon = line.find("ULLON")
    index_lrlat = line.find("LRLAT")
    if index_ullon >= 0 and index_lrlat >= 0:
      ullon = float(line[ index_ullon+7 : index_lrlat-1 ])
      lrlat = float(line[ index_lrlat+7 : ])
    else:
      raise InputError, "ULLON and LRLAT didn't follow ULLAT."

    coords.append(ullat, ullon, lrlat)

Pode funcionar, mas é feio. Não sou especialista em análise de cadeia.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top