python 全国省市区列表查询
支持模糊查询和精确查询,返回查询省市的所有子节点
·
加载数据
原始数据省市区.json
参考:https://blog.csdn.net/itnerd/article/details/125627147
读取上述 json 文件
class AllCity:
def __init__(self, json_file):
self.dictionary = {}
with open(json_file, 'r') as file:
self.dictionary = json.load(file)
def __query(self, jsonObj, key, field, exact=False):
"""
该函数搜索json对象中所有满足字段field的值等于key的条目,
允许模糊查找,结果存储于self.result_list中
参数:
jsonObj - 搜索的json对象
key - 字符型,待匹配的值
field - 字符型,查询的字段
exact - 布尔型,是否精确匹配
返回:
无
抛出异常:
无
"""
for f in jsonObj:
if f == field:
if exact:
if jsonObj[field] == key:
self.result_list.append(jsonObj)
else:
if key in jsonObj[field]:
self.result_list.append(jsonObj)
else:
if isinstance(jsonObj[f], dict):
self.__query(jsonObj[f], key, field, exact)
if isinstance(jsonObj[f], list):
for item in jsonObj[f]:
if isinstance(item, dict):
self.__query(item, key, field, exact)
def query(self, key, field='name', exact=True):
self.result_list = []
self.__query(self.dictionary, key, field, exact)
return self.result_list
ac = AllCity('省市区.json')
模糊查询
ac.query('吉县', field='name', exact=False)
'''
[{'code': 141028, 'name': '吉县'},
{'code': 220221, 'name': '永吉县'},
{'code': 330523, 'name': '安吉县'},
{'code': 542525, 'name': '革吉县'},
{'code': 640422, 'name': '西吉县'}]
'''
pc.query('河区', field='name', exact=False)
'''
[{'code': 120117, 'name': '宁河区'},
{'code': 130304, 'name': '北戴河区'},
{'code': 130903, 'name': '运河区'},
{'code': 150202, 'name': '东河区'},
{'code': 150802, 'name': '临河区'},
{'code': 210103, 'name': '沈河区'},
{'code': 210703, 'name': '凌河区'},
{'code': 210911, 'name': '细河区'},
{'code': 211011, 'name': '太子河区'},
{'code': 211204, 'name': '清河区'},
{'code': 230306, 'name': '城子河区'},
{'code': 230711, 'name': '乌马河区'},
{'code': 230712, 'name': '汤旺河区'},
{'code': 230904, 'name': '茄子河区'},
{'code': 340111, 'name': '包河区'},
{'code': 410411, 'name': '湛河区'},
{'code': 411502, 'name': '浉河区'},
{'code': 440106, 'name': '天河区'},
{'code': 511113, 'name': '金口河区'},
{'code': 620103, 'name': '七里河区'},
{'code': 650106, 'name': '头屯河区'}]
'''
精确查询
pc.query('吉县', field='name', exact=True)
'''
[{'code': 141028, 'name': '吉县'}]
'''
pc.query(141027, field='code', exact=True)
'''
[{'code': 141027, 'name': '浮山县'}]
'''
pc.query('北京市', field='name', exact=True)
'''
[{'code': 110000,
'name': '北京市',
'list': [{'code': 110101, 'name': '东城区'},
{'code': 110102, 'name': '西城区'},
{'code': 110105, 'name': '朝阳区'},
{'code': 110106, 'name': '丰台区'},
{'code': 110107, 'name': '石景山区'},
{'code': 110108, 'name': '海淀区'},
{'code': 110109, 'name': '门头沟区'},
{'code': 110111, 'name': '房山区'},
{'code': 110112, 'name': '通州区'},
{'code': 110113, 'name': '顺义区'},
{'code': 110114, 'name': '昌平区'},
{'code': 110115, 'name': '大兴区'},
{'code': 110116, 'name': '怀柔区'},
{'code': 110117, 'name': '平谷区'},
{'code': 110118, 'name': '密云区'},
{'code': 110119, 'name': '延庆区'}]}]
'''
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献8条内容
所有评论(0)