郵便番号の検索

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)