Skip to content

Instantly share code, notes, and snippets.

@deton
Created September 15, 2025 11:42
Show Gist options
  • Save deton/39f9f681a63fe83edcea41fa97097e73 to your computer and use it in GitHub Desktop.
Save deton/39f9f681a63fe83edcea41fa97097e73 to your computer and use it in GitHub Desktop.
特Pの駐車場検索JSONレスポンスをCSVに変換、1時間あたりの駐車料金を抽出するスクリプト
import csv
import io
import re
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
def get_price(s):
def per_hour(yen, per):
return yen * 60.0 / per
m = re.search(r"(\d+)円.?(\d+)分", s)
if m:
yen = int(m.group(1))
per = int(m.group(2))
return per_hour(yen, per)
m = re.search(r"(\d+)分[^\d]?(\d+)円", s)
if m:
per = int(m.group(1))
yen = int(m.group(2))
return per_hour(yen, per)
m = re.search(r"(\d+)分[^\d]?¥(\d+)", s)
if m:
per = int(m.group(1))
yen = int(m.group(2))
return per_hour(yen, per)
m = re.search(r"24時間[^\d]?(\d+)円", s)
if m:
yen = int(m.group(1))
return yen
m = re.search(r"24時間[^\d]?¥(\d+)", s)
if m:
yen = int(m.group(1))
return yen
m = re.search(r"(\d+)時間[^\d]?¥(\d+)", s)
if m:
per = int(m.group(1))
yen = int(m.group(2))
return per_hour(yen, per * 60)
m = re.search(r"(\d+)時間[^\d]?(\d+)円", s)
if m:
per = int(m.group(1))
yen = int(m.group(2))
return per_hour(yen, per * 60)
m = re.search(r"(\d+)円[^\d]?(\d+)時間", s)
if m:
yen = int(m.group(1))
per = int(m.group(2))
return per_hour(yen, per * 60)
m = re.search(r"1日[^\d]?(\d+)円", s)
if m:
yen = int(m.group(1))
return yen
m = re.search(r"1日1回[^\d]?(\d+)円", s)
if m:
yen = int(m.group(1))
return yen
return None
def read_csv(fname):
data = []
with open(fname, encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
# print(f'{get_price(row["feature"])}, {row["feature"]}')
row["price"] = get_price(row["feature"])
del row["is_toku_p"]
data.append(row)
with open(f"{fname[:-4]}_price.csv", "w", newline="\n", encoding="utf-8") as f:
writer = csv.DictWriter(f, ["id", "parking_lot", "price", "latitude", "longitude", "name", "feature"])
writer.writeheader()
writer.writerows(data)
if __name__ == "__main__":
for fname in sys.argv[1:]:
read_csv(fname)
#!/bin/bash
# for f in json/*.json; do ./tocsv.sh <$f >${f//json/csv}; done
jq -r '.content[]|[.id,.is_toku_p,.parking_lot,.latitude,.longitude,.name,(.feature|gsub("\n";";"))]|@csv'
# grep -h '^[0-9]*,false,[0-9]' csv/*.csv | sort -t, -k 6 -u >all.csv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment