ChatGPTに、住所の文字列から都道府県名と市区町村名をそれぞれ抽出して、DBに別途保存するPythonコードを書いてもらった

ChatGPTに、住所の文字列から都道府県名、市区町村名、それ以降をそれぞれ抽出して、DBに別途保存するPythonコードを書いてもらいました。ダミーの会員情報を作成した後、住所が都道府県や市区町村に分離されていなく、集計の都合などで別カラムにしたい場合を想定しています(ダミー生成時にきちんと分けておけば良いだけですが。。。)

 

指示文(プロンプト):

「鹿児島県鴨川市鍛冶ケ沢17丁目22番1号」のような住所を示すテキストから、都道府県、市区町村名、それ以降をそれぞれ取り出すPythonコードを書いてください。正規表現を使ってください。読み込むDBは「dummy_data.db」、テーブルは「dummy_data」、住所テキストは「full_address」になります。都道府県は「prefecture」、市区町村は「city」、それ以降の文字列は「address1」に格納したいです。

 

回答:

import re
import sqlite3

# DBに接続
conn = sqlite3.connect("dummy_data.db")
cur = conn.cursor()

# テーブルから住所を取得
cur.execute("SELECT id, full_address FROM dummy_data")
rows = cur.fetchall()

# 正規表現で市区町村名を抽出
pattern = r"(.+?[都道府県])(.+?[市区町村])(.+)"
for row in rows:
    id = row[0]
    address = row[1]
    match = re.match(pattern, address)
    if match:
        prefecture = match.group(1)
        # prefectureカラムに保存
        cur.execute("UPDATE dummy_data SET prefecture = ? WHERE id = ?", (prefecture, id))
        city = match.group(2)
        # cityカラムに保存
        cur.execute("UPDATE dummy_data SET city = ? WHERE id = ?", (city, id))
        address1 = match.group(3)
        # address1カラムに保存
        cur.execute("UPDATE dummy_data SET address1 = ? WHERE id = ?", (address1, id))

# DBを閉じる
conn.commit()
conn.close()
    
結果:

以下のように成功しました。ダミーなので住所自体は架空のものです。滋賀県板橋区は無いですし。

取り出し後、改めて最初と最後の10件を取り出して目視確認。都道府県別の数も処理の前後でdiffなどで比較して、それも完全一致してましたので、漏れはなさそうですね。