見出し画像

住所や郵便番号、電話番号の全角半角をPythonでよしなに整える

住所や郵便番号、電話番号を用いて名寄せしたいのに、数字、アルファベットおよび記号が半角全角折混ざって構成されていて辛かったので簡単なスクリプトを書きました。

なお、以下の記事を参考(というか一部流用)にしました。

【Python】一行で全角と半角を相互変換する(英字+数字+記号)

from dataclasses import dataclass
import re
@dataclass
class Convert2CorrectContact:
   ZEN = "".join(chr(0xff01 + i) for i in range(94))
   HAN = "".join(chr(0x21 + i) for i in range(94))
   ZEN = ZEN + chr(0x30fc)
   HAN = HAN + chr(0x2d)
   ZEN2HAN = str.maketrans(ZEN, HAN)
   def convert_postcode(self, postcode: str) -> str:
       """
       郵便番号を変換するメソッド。数字とアルファベットを半角に変換して返す。(郵便番号はアルファベットを含むケースが存在する国もあるため)        
       """
       return ''.join(re.findall('[0-9a-zA-Z]+', postcode.translate(self.ZEN2HAN))) if postcode is not None else None
   def convert_tel(self, tel: str) -> str:
       """
       電話番号を変換するメソッド。数字のみを半角に変換して返す。
       """
       if tel is not None:
           tel = ''.join(re.findall('[0-9]+', tel.translate(self.ZEN2HAN)))
           if len(tel) > 0:
               tel = tel if tel[0] == '0' else '0' + tel
       return tel if tel is not None else None
   def convert_address(self, address: str) -> str:
       """
       住所を変換するメソッド。数字、アルファベットおよび記号を半角に変換する。
       """
       return address.translate(self.ZEN2HAN) if address is not None else None

c2cc = Convert2CorrectContact()
print(c2cc.convert_address('東京都港区北青山3ー1-2 青山セント・シオンビル 4階'))
print(c2cc.convert_tel('03-6447-0090'))
print(c2cc.convert_postcode('107-0061'))

Google Colabなんかで実行すると以下の結果を得られます。

東京都港区北青山3-1-2 青山セント・シオンビル 4階
0364470090
1070061

今回は住所録の整備のために作成したのですが、convert_addressは企業名なんかにも流用できそう。これで本来やるべき作業に集中できそうですね!

この記事が気に入ったらサポートをしてみませんか?