Application console interactive pour la recherche d'adresses et de codes postaux

introduction

Ceci est le premier article du Calendrier de l'Avent. Puisque le cadre python était ouvert, je publierai un cas pendant que j'ai peur.

Cliquez ici pour l'article précédent → Comment obtenir des informations météo avec LINE Notify + Python

Contexte

Dès décembre de cette année. Décembre, c'est Noël, mais c'est aussi le moment de préparer une carte de nouvel an.

Quand j'ai pensé à émettre une carte de nouvel an, je connaissais l'adresse, mais quel était le code postal ...? Avez-vous déjà pensé cela? (Et vice versa)

Maintenant, si vous effectuez une recherche Google pour l'adresse, vous obtiendrez le code postal, J'aurais aimé qu'il y ait un outil qui pourrait rechercher des adresses et des codes postaux sans environnement Internet. Après avoir maîtrisé python, j'ai créé une application console simple.

Il existe de nombreux cas de recherche d'adresse par code postal, Je ne pensais pas qu'il y avait beaucoup de cas de recherche d'un code postal à partir d'une adresse, alors j'ai essayé de le gérer dans les deux cas.

environnement

・ Mac OS Mojave ・ Python3 ・ Pyinstaller

Spécifications de traitement

L'organigramme est le suivant. En gros, voulez-vous vider l'adresse du code postal que vous avez entré? Le format est tel que l'utilisateur peut choisir de manière interactive de vider le code postal correspondant à l'adresse saisie (seuls certains noms de lieux sont acceptables).

FindAddress.png

Code source

Je télécharge "KEN_ALL.CSV" à partir de la page de téléchargement des données de code postal de la page Web du bureau de poste, et je le mets directement sous / Utilisateurs / pour le lire.

https://www.post.japanpost.jp/zipcode/download.html

FindAddress_for_Mac.py


import sys

# Set Path including "KEN_ALL.CSV" for Mac OS X
csv_path = "/Users/KEN_ALL.CSV"

def GetAddress():
    postal_code = input("Type target postal code:")
    fp = open(csv_path, "r", encoding="shift_jis")
    for line in fp:
        line = line.replace(' ', '') # cut space
        line = line.replace('"', '') # cut double quatation
        cells = line.split(",")      # split by comma
        code = cells[2]  # Postal code
        pref = cells[6]  # Prefucture
        city = cells[7]  # City name
        ad = cells[8]    # Address name
        title = pref + city + ad
        if code.find(postal_code) != -1:
            print(title)
    fp.close()

def GetPostalCode():
    addr = input("Type target address:")
    fp = open(csv_path, "r", encoding="shift_jis")
    for line in fp:
        line = line.replace(' ', '') # cut space
        line = line.replace('"', '') # cut double quatation
        cells = line.split(",")      # split by comma
        code = cells[2]  # Postal Code
        pref = cells[6]  # Prefucture
        city = cells[7]  # City name
        ad = cells[8]    # Address name
        title = pref + city + ad
        if title.find(addr) != -1:
            print(code + ":" + title)
    fp.close()


def main():
    print("\n")
    print("####################################################")
    print("################### FINDADDRESS ####################")
    print("####################################################")
    print("\n")
    print("[DISCRIPTION]")
    print(" This tool is to get address or postal code.")
    print(" If you type '1', you can get unknown address by typing postal code.")
    print(" If you type '2', you can get unknown postal code by typing KEYWORD about address name.")
    print("\n")

    while True:
        print("[OPERATION]")
        print("input the following number which you want to get.")
        number = input("[1:Address  2:PostalCode  99 (or SPACE):Close]:")
        if number.isdigit() != 1: # Filter non-integer value
            sys.exit()
        int_number = int(number)  # Convert String to Integer
        if int_number == 1:       # The case that user types "1"
            GetAddress()
            print("\n")
        elif int_number == 2:     # The case that user types "2"
            GetPostalCode()
            print("\n")
        elif int_number == 99:    # The case that user types "99"
            sys.exit()
        else:                     # Exception handling
            print("Invalid Number. Type again.")
            print("\n")

if __name__ == "__main__":
    main()

Faire exe avec pyinstaller

Veuillez vous référer à cet article pour la procédure de conversion exe.

Créer un fichier exe avec PyInstaller https://qiita.com/takanorimutoh/items/53bf44d6d5b37190e7d1

Résultat d'exécution

A titre d'exemple, recherchons l'adresse et le code postal de Shinkiba à Koto-ku, Tokyo.

Si vous entrez le code postal "1360082" dans la recherche d'adresse de 1, l'adresse de Shinkiba "Shinkiba, Koto-ku, Tokyo" sera jeté. Si vous entrez le mot-clé d'adresse «Shinkiba» dans la recherche de code postal de 2, les codes postaux et les adresses de toutes les adresses contenant les caractères de Shinkiba seront sous-évalués en tant qu'ensemble.

スクリーンショット 2019-12-05 0.42.01.png

point important

Avant de l'utiliser, assurez-vous de définir le paramètre de sortie du shell sur "fermer la fenêtre" dans les préférences du terminal. Si vous ne le faites pas, la console restera après la fermeture de l'application.

名称未設定.png

finalement

Dans le futur, si j'ai le temps, j'essaierai d'implémenter une version compatible avec Windows et Linux.

Recommended Posts

Application console interactive pour la recherche d'adresses et de codes postaux
Application console interactive pour la recherche d'adresses et de codes postaux
LaTeX confortable avec sous-système Windows pour Linux et VS Code
Obtenir une adresse à partir d'un code postal
Vectoriser les phrases et rechercher des phrases similaires
Raisonnement causal et recherche causale par Python (pour les débutants)