Je dois faire un peu de massage de nos données de colis pour les rendre utilisables par un programme dans des hélicoptères de shérif. Le programme nécessite l'un des formats d'adresse suivants dans les champs:
Nos adresses sont actuellement dans un seul domaine: ex: 1234 W Main St.
Existe-t-il un moyen d'automatiser la division des champs dans l'un de ces formats souhaités?
Je peux imaginer que le format à deux champs serait plus facile en appelant simplement à une séparation après les numéros, mais pourrait également causer un problème pour les rues telles que 1st Ave, etc.
Réponses:
Au lieu d'utiliser plusieurs RegExes pour analyser les adresses, utilisez simplement l'outil prêt à l'emploi d'Esri conçu pour cette tâche, Standardize Addresses . Il est disponible à tous les niveaux de licence et mon expérience avec celui-ci a été positive.
la source
Vous pouvez y parvenir dans la calculatrice de champ en utilisant python. Ce n'est peut-être pas le plus élégant mais c'est un début, en supposant le cas le plus simple (c'est-à-dire que vos adresses se ressemblent toutes). Je voudrais d'abord créer les champs supplémentaires nécessaires. En supposant que votre colonne avec l'adresse complète s'appelle "Adresse".
Pour HOUSENO dans la calculatrice de terrain, écrivez:
Cela peut ensuite être appelé à partir de la boîte de calcul comme suit:
Pour le nom de votre rue:
Codeblock:
Pour la direction en supposant que c'est le premier caractère à chaque fois:
Codeblock:
Voici la ressource python pour re . Cette étude de cas 7.1: adresses de rue m'a aidé à plusieurs reprises à trier ma base de données de rues / adresses en utilisant également des modules python et re. Cela devrait vous aider, à partir d'ici si vous n'obtenez pas de résultats, vous voulez commenter et je peux modifier mon code
la source
Comme l'a dit Erica, votre deuxième format est facile. Si tous vos noms de rue étaient un seul mot, vous pouvez vérifier la longueur de la liste après avoir divisé le champ d'origine. Longueur de 3 = pas de préfixe, longueur de 4 = a un préfixe (en supposant également que SUFTYPE est toujours rempli). Cela échoue lorsqu'une rue est composée de plusieurs mots, comme «Grand River». Vous pouvez vérifier si le deuxième élément correspond à une liste de préfixes autorisés et continuer à partir de là. Vous devez tester cela pour voir si cela fonctionne avec vos données.
la source
Assurez-vous que votre entrée est au format chaîne et utilisez simplement la fonction string.split () qui se divisera sur l'espace blanc et retournera une liste. (ex. "1234 W Main St." retournerait ["1234", "W", "Main", "St."])
À partir de là, j'utiliserais des instructions conditionnelles pour vérifier vos données en fonction de la cohérence de votre entrée. Si la seule incohérence dans vos données est qu'il y a parfois un prédir et d'autres fois qu'il n'y en a pas, faites simplement une vérification len sur la liste retournée pour voir si elle a une longueur de 3 ou 4 (ou> 4 si votre rue nom contient des espaces).
si len (splitList) == 4:
elif len (splitList) == 3:
la source