| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- import json
- from pathlib import Path
- # 直接导出一个全局映射,供其他脚本直接 import
- _DEFAULT_PATH = Path(__file__).with_name("city.json")
- def build_city_name_to_id():
- """
- 递归读取 city.json,生成 {name: id} 映射。
- 会遍历每个节点的 `sons` 字段(如存在)。
- """
- city_json_path = Path(_DEFAULT_PATH)
- raw = city_json_path.read_text(encoding="utf-8")
- data = json.loads(raw)
- name_to_id = {}
- def walk(nodes):
- for node in nodes:
- name = node.get("name")
- node_id = node.get("id")
- if name is not None and node_id is not None:
- # 若出现重名,后出现的会覆盖前面的值
- name_to_id[str(name)] = int(node_id)
- sons = node.get("sons") or []
- if sons:
- walk(sons)
- walk(data)
- return name_to_id
- def build_city_name_to_id_2():
- city_json_path = Path(_DEFAULT_PATH)
- raw = city_json_path.read_text(encoding="utf-8")
- data_list = json.loads(raw)
- new_dict = {}
- for data in data_list:
- province = data["name"]
- province_id = data["id"]
- sons = data.get("sons") or []
- for son in sons:
- city = son.get("name", "")
- city_id = son.get("id", "")
- new_dict[city] = {"province": province, "province_id": province_id,
- "city": city, "city_id": city_id}
- return new_dict
- def get_city(city_str):
- city_dict = build_city_name_to_id()
- province = ""
- city = ""
- if "北京" in city_str:
- city = "北京市"
- province = "北京"
- if "重庆" in city_str:
- city = "重庆市"
- province = "重庆"
- if "上海" in city_str:
- city = "上海市"
- province = "上海"
- if "天津" in city_str:
- city = "天津市"
- province = "天津"
- if "新疆" in city_str:
- province = "新疆维吾尔自治区"
- if "宁夏" in city_str:
- province = "宁夏回族自治区"
- if "内蒙古" in city_str:
- province = "内蒙古自治区"
- if "西藏" in city_str:
- province = "西藏自治区"
- if "广西" in city_str:
- province = "广西壮族自治区"
- for _city, _city_id in city_dict.items():
- city_name = _city.replace("省", "").replace("市", "")
- if city_name in city_str and "省" in _city:
- if not province:
- province = _city
- if city_name in city_str and "市" in _city:
- if not city:
- city = _city
- city_id = province_id = 0
- if city:
- city_id = city_dict[city]
- if province:
- province_id = city_dict[province]
- return city_id, province_id, city, province
- def get_city_2(city_str):
- """可以通过市获取省份"""
- city_dict = build_city_name_to_id_2()
- province = ""
- city = ""
- if "北京" in city_str:
- city = "北京市"
- province = "北京"
- if "重庆" in city_str:
- city = "重庆市"
- province = "重庆"
- if "上海" in city_str:
- city = "上海市"
- province = "上海"
- if "天津" in city_str:
- city = "天津市"
- province = "天津"
- if "新疆" in city_str:
- province = "新疆维吾尔自治区"
- if "宁夏" in city_str:
- province = "宁夏回族自治区"
- if "内蒙古" in city_str:
- province = "内蒙古自治区"
- if "西藏" in city_str:
- province = "西藏自治区"
- if "广西" in city_str:
- province = "广西壮族自治区"
- city_id = province_id = 0
- for _city, _city_value in city_dict.items():
- city_name = _city.replace("市", "")
- if city_name in city_str:
- # if not province:
- province = _city_value["province"]
- province_id = _city_value["province_id"]
- city = _city
- city_id = _city_value["city_id"]
- print(city_id, province_id, city, province)
- return city_id, province_id, city, province
- if __name__ == "__main__":
- city_id, province_id, city, province = get_city("香港")
- print(city_id, province_id, city, province)
- get_city_2("哈尔滨")
|