Eu tenho que fazer uma massagem nos nossos dados de parcelas para torná-los utilizáveis por um programa em helicópteros xerife. O programa requer um dos seguintes formatos de endereço dentro dos campos:
Atualmente, nossos endereços estão em um campo: ex: 1234 W Main St.
Existe uma maneira de automatizar a divisão dos campos em um desses formatos desejados?
Eu posso imaginar que o formato de dois campos seria mais fácil apenas pedindo uma divisão após os números, mas também poderia causar um problema para ruas como a 1ª Avenida, etc.
Respostas:
Em vez de usar vários RegExes para analisar endereços, basta usar a ferramenta pronta para uso da Esri, projetada para esta tarefa, Padronizar endereços . Está disponível em todos os níveis de licença e minha experiência com ela foi positiva.
fonte
Você pode conseguir isso na calculadora de campo usando python. Pode não ser o mais elegante, mas é um começo, assumindo o caso mais simples (ou seja, todos os seus endereços parecem iguais). Primeiro, eu criaria os campos adicionais necessários. Supondo que sua coluna com o endereço completo é chamada "Endereço".
Para HOUSENO na calculadora de campo, escreva:
Isso pode ser chamado na caixa de cálculo como:
Para o seu nome da rua:
Codeblock:
Para direção, assumindo que é o primeiro caractere de cada vez:
Codeblock:
Aqui está o recurso python para re . Este Estudo de Caso 7.1: Endereços de Rua me ajudou várias vezes a classificar meu banco de dados de rua / endereço usando também módulos python e re. Isso deve ajudá-lo, a partir daqui, se você não estiver obtendo resultados, deseja comentar e eu posso alterar meu código
fonte
Como Erica disse, seu segundo formato é fácil. Se todos os nomes de ruas fossem uma palavra, você poderá verificar o tamanho da lista depois de dividir o campo original. Comprimento 3 = sem prefixo, comprimento 4 = possui um prefixo (também assumindo que SUFTYPE sempre é preenchido). Isso falha quando uma rua tem mais de uma palavra, como 'Grand River'. Você pode verificar se o segundo elemento corresponde a uma lista de prefixos permitidos e prosseguir a partir daí. Você precisaria testar isso para ver se funcionava com seus dados.
fonte
Verifique se a entrada está no formato string e simplesmente use a função string.split () que será dividida em espaço em branco e retornará uma lista. (por exemplo, "1234 W Main St." retornaria ["1234", "W", "Main", "St."])
A partir daí, eu usaria algumas instruções condicionais para verificar seus dados, dependendo da consistência de sua entrada. Se a única inconsistência em seus dados é que, às vezes, há um predir e outras, não, simplesmente faça uma verificação de len na lista retornada para ver se ele tem um comprimento de 3 ou 4 (ou> 4 se a sua rua nome tem espaços).
se len (splitList) == 4:
elif len (splitList) == 3:
fonte