Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【PowerShell】郵便番号の一覧を得る

以下は2023年12月下旬に、日本郵便株式会社のウェブサイトから郵便番号の情報が納められたファイルをダウンロードして、郵便番号とそれに対応する町域等をデータフレームにした例。UTF-8形式のファイルをダウンロードしている。ダウンロードしたファイルはテンポラリファイルとして保存をして削除をしているが、そのファイルから展開したファイル(utf_ken_all.csv)はカレントディレクトリに保存をして、そのまま残していることに注意。

PS > $url = "https://www.post.japanpost.jp/zipcode/dl/utf/zip/utf_ken_all.zip"
PS > $tempfile = New-TemporaryFile
PS > $wc = New-Object Net.WebClient
PS > $wc.DownloadFile($url, $tempfile)
PS > Move-Item $tempfile "$tempfile.zip"
PS > Expand-Archive -Force "$tempfile.zip" .
PS > Remove-Item "$tempfile.zip"
PS > Get-ChildItem utf_ken_all.csv  | Select-Object Name, Length
Name              Length
----              ------
utf_ken_all.csv 18333984
PS > $zip = Import-Csv -Encoding UTF8 .\utf_ken_all.csv -Header (1..15)

町域で検索を試してみる。レゴランドジャパンが位置する住所(金城ふ頭)を検索してみると、一か所しか登録されていないことがわかる。ユニバーサル・スタジオ・ジャパンが位置する「桜島」も同様。「石見」が含まれる町域は複数あるが「舞菜香」という町域は一か所も登録されていないことがわかる。

PS > $h = "3", "7", "8", "9"
PS > $idx = ($zip.9 | sls "^金城ふ頭$").LineNumber | % {$_ - 1}
PS > Write-Host $idx
67276
PS > $zip[$idx] | Select-Object $h
3       7      8            9
-       -      -            -
4550848 愛知県 名古屋市港区 金城ふ頭
PS > $idx = ($zip.9 | sls "^桜島$").LineNumber | % {$_ - 1}
PS > Write-Host $idx
84517
PS > $zip[$idx] | Select-Object $h
3       7      8            9
-       -      -            -
5540031 大阪府 大阪市此花区 桜島
PS > $idx = ($zip.9 | sls "石見").LineNumber | % {$_ - 1}
PS > Write-Host $idx
4013 82495 87335 95014 98416 98422 98429 99001 100259 110949
PS > $zip[$idx] | Select-Object $h
3       7      8            9
-       -      -            -
0430401 北海道 二海郡八雲町 熊石見日町
6101128 京都府 京都市西京区 大原野石見町
5860058 大阪府 河内長野市   石見川
6360212 奈良県 磯城郡三宅町 石見
6895663 鳥取県 日野郡日南町 上石見
6895665 鳥取県 日野郡日南町 下石見
6895664 鳥取県 日野郡日南町 中石見
6980051 島根県 益田市       内田町(石見空港)
7100814 岡山県 倉敷市       石見町
7812145 高知県 吾川郡いの町 柳瀬石見
PS > $idx = ($zip.9 | sls "舞菜香").LineNumber | % {$_ - 1}
PS > Write-Host $idx
-1

なお、「sls」はSelect-Stringコマンドレットのエイリアス