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などで比較して、それも完全一致してましたので、漏れはなさそうですね。