郵便番号の検索
30分プログラム、その115。Pythonで郵便番号の検索。
郵便番号のデータは、郵便番号データダウンロード - 日本郵便でダウンロードできる。
久しぶりPythonを使ったら、色々忘れててびっくりした。
使い方
$ sh csv2py.sh 23aichi.csv > ZipData.py $ python zip.py 4710852 愛知県豊田市御幸町 $ python zip.py 御幸 4710852 : 愛知県豊田市御幸町 4430042 : 愛知県蒲郡市御幸町 4480821 : 愛知県刈谷市御幸町 4410314 : 愛知県宝飯郡御津町御幸浜 4750887 : 愛知県半田市御幸町 4860953 : 愛知県春日井市御幸町 4730901 : 愛知県豊田市御幸本町 4680075 : 愛知県名古屋市天白区御幸山 4460032 : 愛知県安城市御幸本町
ソースコード
csv2py.sh
データ変換用のスクリプト。
#!/bin/sh echo "# -*- mode:python; coding:utf-8 -*-" awk 'BEGIN { FS="," print "data = {"; } END{ print "}";} function f(s){ return substr(s,2,length(s)-2); } { if(f($9) == "以下に掲載がない場合"){ printf "\"%s\": \"%s%s\",\n",f($3),f($7),f($8); }else{ printf "\"%s\": \"%s%s%s\",\n",f($3),f($7),f($8),f($9); } }' $1
zip.py
プログラム本体。
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- # # zip.py - # # Copyright(C) 2007 by mzp # Author: MIZUNO Hiroki <hiroki1124@gmail.com> # http://mzp.sakura.ne.jp/ # # Timestamp: 2007/08/22 22:29:42 # # This program is free software; you can redistribute it and/or # modify it under the same terms as Python itself. # import sys import ZipData def isNumber(x): try: int(x) return True except ValueError: return False if len(sys.argv) < 2: print "usage: zip.py ZIP-CODE" elif isNumber(sys.argv[1]): print ZipData.data[sys.argv[1]] else: for (key,val) in ZipData.data.iteritems(): if val.find(sys.argv[1]) != -1: print "%s : %s" % (key,val)