diff --git a/Log/1.log b/Log/1.log index 6932151..3e8cc96 100644 --- a/Log/1.log +++ b/Log/1.log @@ -1,66 +1,67 @@ -C:\Users\Administrator\.conda\envs\yunnan\python.exe D:\dsWork\YunNanProject\Tools\T2_GetJson.py -行 3: 云南省 -> 全称: 云南省, 行政区划码: 530000000 -行 4: 未找到 '昆明市' 的相关信息 -行 5: 未找到 '五华区' 的相关信息 -行 6: 未找到 '盘龙区' 的相关信息 -行 7: 未找到 '官渡区' 的相关信息 -行 8: 未找到 '西山区' 的相关信息 -行 9: 未找到 '东川区' 的相关信息 -行 10: 未找到 '呈贡区' 的相关信息 -行 11: 未找到 '晋宁区' 的相关信息 -行 12: 未找到 '富民县' 的相关信息 -行 13: 未找到 '宜良县' 的相关信息 +C:\Users\Administrator\.conda\envs\yunnan\python.exe -X pycache_prefix=C:\Users\Administrator\AppData\Local\JetBrains\PyCharm2025.2\cpython-cache "C:/Program Files/JetBrains/PyCharm 2025.2.0.1/plugins/python-ce/helpers/pydev/pydevd.py" --multiprocess --qt-support=auto --client 127.0.0.1 --port 51895 --file D:\dsWork\YunNanProject\Tools\T2_GetJson.py +Connected to: . +已连接到 pydev 调试器(内部版本号 252.23892.515)行 3: 云南省 -> 全称: 云南省, 行政区划码: 530000000 +行 4: 昆明市 -> 全称: 昆明市, 行政区划码: 530100000 +行 5: 五华区 -> 全称: 五华区, 行政区划码: 530102000 +行 6: 盘龙区 -> 全称: 盘龙区, 行政区划码: 530103000 +行 7: 官渡区 -> 全称: 官渡区, 行政区划码: 530111000 +行 8: 西山区 -> 全称: 西山区, 行政区划码: 530112000 +行 9: 东川区 -> 全称: 东川区, 行政区划码: 530113000 +行 10: 呈贡区 -> 全称: 呈贡区, 行政区划码: 530114000 +行 11: 晋宁区 -> 全称: 晋宁区, 行政区划码: 530115000 +行 12: 富民县 -> 全称: 富民县, 行政区划码: 530124000 +行 13: 宜良县 -> 全称: 宜良县, 行政区划码: 530125000 行 14: 石林县 -> 全称: 石林彝族自治县, 行政区划码: 530126000 -行 15: 未找到 '嵩明县' 的相关信息 +行 15: 嵩明县 -> 全称: 嵩明县, 行政区划码: 530127000 行 16: 禄劝县 -> 全称: 禄劝彝族苗族自治县, 行政区划码: 530128000 行 17: 寻甸县 -> 全称: 寻甸回族彝族自治县, 行政区划码: 530129000 -行 18: 未找到 '安宁市' 的相关信息 -行 19: 未找到 '曲靖市' 的相关信息 -行 20: 未找到 '麒麟区' 的相关信息 -行 21: 未找到 '沾益区' 的相关信息 -行 22: 未找到 '马龙区' 的相关信息 -行 23: 未找到 '陆良县' 的相关信息 -行 24: 未找到 '师宗县' 的相关信息 -行 25: 未找到 '罗平县' 的相关信息 -行 26: 未找到 '富源县' 的相关信息 -行 27: 未找到 '会泽县' 的相关信息 -行 28: 未找到 '宣威市' 的相关信息 -行 29: 未找到 '玉溪市' 的相关信息 -行 30: 未找到 '红塔区' 的相关信息 -行 31: 未找到 '江川区' 的相关信息 +行 18: 安宁市 -> 全称: 安宁市, 行政区划码: 530181000 +行 19: 曲靖市 -> 全称: 曲靖市, 行政区划码: 530300000 +行 20: 麒麟区 -> 全称: 麒麟区, 行政区划码: 530302000 +行 21: 沾益区 -> 全称: 沾益区, 行政区划码: 530303000 +行 22: 马龙区 -> 全称: 马龙区, 行政区划码: 530304000 +行 23: 陆良县 -> 全称: 陆良县, 行政区划码: 530322000 +行 24: 师宗县 -> 全称: 师宗县, 行政区划码: 530323000 +行 25: 罗平县 -> 全称: 罗平县, 行政区划码: 530324000 +行 26: 富源县 -> 全称: 富源县, 行政区划码: 530325000 +行 27: 会泽县 -> 全称: 会泽县, 行政区划码: 530326000 +行 28: 宣威市 -> 全称: 宣威市, 行政区划码: 530381000 +行 29: 玉溪市 -> 全称: 玉溪市, 行政区划码: 530400000 +行 30: 红塔区 -> 全称: 红塔区, 行政区划码: 530402000 +行 31: 江川区 -> 全称: 江川区, 行政区划码: 530403000 行 32: 澄江县 -> 全称: 澄江市, 行政区划码: 530481000 -行 33: 未找到 '通海县' 的相关信息 -行 34: 未找到 '华宁县' 的相关信息 -行 35: 未找到 '易门县' 的相关信息 +行 33: 通海县 -> 全称: 通海县, 行政区划码: 530423000 +行 34: 华宁县 -> 全称: 华宁县, 行政区划码: 530424000 +行 35: 易门县 -> 全称: 易门县, 行政区划码: 530425000 行 36: 峨山县 -> 全称: 峨山彝族自治县, 行政区划码: 530426000 行 37: 新平县 -> 全称: 新平彝族傣族自治县, 行政区划码: 530427000 行 38: 元江县 -> 全称: 元江哈尼族彝族傣族自治县, 行政区划码: 530428000 -行 39: 未找到 '保山市' 的相关信息 -行 40: 未找到 '隆阳区' 的相关信息 -行 41: 未找到 '施甸县' 的相关信息 -行 42: 未找到 '龙陵县' 的相关信息 -行 43: 未找到 '昌宁县' 的相关信息 -行 44: 未找到 '腾冲市' 的相关信息 -行 45: 未找到 '昭通市' 的相关信息 -行 46: 未找到 '昭阳区' 的相关信息 -行 47: 未找到 '鲁甸县' 的相关信息 -行 48: 未找到 '巧家县' 的相关信息 -行 49: 未找到 '盐津县' 的相关信息 -行 50: 未找到 '大关县' 的相关信息 -行 51: 未找到 '永善县' 的相关信息 -行 52: 未找到 '绥江县' 的相关信息 -行 53: 未找到 '镇雄县' 的相关信息 -行 54: 未找到 '彝良县' 的相关信息 -行 55: 未找到 '威信县' 的相关信息 -行 56: 未找到 '水富市' 的相关信息 -行 57: 未找到 '丽江市' 的相关信息 -行 58: 未找到 '古城区' 的相关信息 +行 39: 保山市 -> 全称: 保山市, 行政区划码: 530500000 +行 40: 隆阳区 -> 全称: 隆阳区, 行政区划码: 530502000 +行 41: 施甸县 -> 全称: 施甸县, 行政区划码: 530521000 +行 42: 龙陵县 -> 全称: 龙陵县, 行政区划码: 530523000 +行 43: 昌宁县 -> 全称: 昌宁县, 行政区划码: 530524000 +行 44: 腾冲市 -> 全称: 腾冲市, 行政区划码: 530581000 +行 45: 昭通市 -> 全称: 昭通市, 行政区划码: 530600000 +行 46: 昭阳区 -> 全称: 昭阳区, 行政区划码: 530602000 +行 47: 鲁甸县 -> 全称: 鲁甸县, 行政区划码: 530621000 +行 48: 巧家县 -> 全称: 巧家县, 行政区划码: 530622000 +行 49: 盐津县 -> 全称: 盐津县, 行政区划码: 530623000 +行 50: 大关县 -> 全称: 大关县, 行政区划码: 530624000 +行 51: 永善县 -> 全称: 永善县, 行政区划码: 530625000 +行 52: 绥江县 -> 全称: 绥江县, 行政区划码: 530626000 +行 53: 镇雄县 -> 全称: 镇雄县, 行政区划码: 530627000 +行 54: 彝良县 -> 全称: 彝良县, 行政区划码: 530628000 +行 55: 威信县 -> 全称: 威信县, 行政区划码: 530629000 +行 56: 水富市 -> 全称: 水富市, 行政区划码: 530681000 +行 57: 丽江市 -> 全称: 丽江市, 行政区划码: 530700000 +行 58: 古城区 -> 全称: 古城区, 行政区划码: 530702000 行 59: 玉龙县 -> 全称: 玉龙纳西族自治县, 行政区划码: 530721000 -行 60: 未找到 '永胜县' 的相关信息 -行 61: 未找到 '华坪县' 的相关信息 +行 60: 永胜县 -> 全称: 永胜县, 行政区划码: 530722000 +行 61: 华坪县 -> 全称: 华坪县, 行政区划码: 530723000 行 62: 宁蒗县 -> 全称: 宁蒗彝族自治县, 行政区划码: 530724000 -行 63: 未找到 '普洱市' 的相关信息 -行 64: 未找到 '思茅区' 的相关信息 +行 63: 普洱市 -> 全称: 普洱市, 行政区划码: 530800000 +行 64: 思茅区 -> 全称: 思茅区, 行政区划码: 530802000 行 65: 宁洱县 -> 全称: 宁洱哈尼族彝族自治县, 行政区划码: 530821000 行 66: 墨江县 -> 全称: 墨江哈尼族自治县, 行政区划码: 530822000 行 67: 景东县 -> 全称: 景东彝族自治县, 行政区划码: 530823000 @@ -70,80 +71,80 @@ C:\Users\Administrator\.conda\envs\yunnan\python.exe D:\dsWork\YunNanProject\Too 行 71: 孟连县 -> 全称: 孟连傣族拉祜族佤族自治县, 行政区划码: 530827000 行 72: 澜沧县 -> 全称: 澜沧拉祜族自治县, 行政区划码: 530828000 行 73: 西盟县 -> 全称: 西盟佤族自治县, 行政区划码: 530829000 -行 74: 未找到 '临沧市' 的相关信息 -行 75: 未找到 '临翔区' 的相关信息 -行 76: 未找到 '凤庆县' 的相关信息 -行 77: 未找到 '云县' 的相关信息 -行 78: 未找到 '永德县' 的相关信息 -行 79: 未找到 '镇康县' 的相关信息 +行 74: 临沧市 -> 全称: 临沧市, 行政区划码: 530900000 +行 75: 临翔区 -> 全称: 临翔区, 行政区划码: 530902000 +行 76: 凤庆县 -> 全称: 凤庆县, 行政区划码: 530921000 +行 77: 云县 -> 全称: 云县, 行政区划码: 530922000 +行 78: 永德县 -> 全称: 永德县, 行政区划码: 530923000 +行 79: 镇康县 -> 全称: 镇康县, 行政区划码: 530924000 行 80: 双江县 -> 全称: 双江拉祜族佤族布朗族傣族自治县, 行政区划码: 530925000 行 81: 耿马县 -> 全称: 耿马傣族佤族自治县, 行政区划码: 530926000 行 82: 沧源县 -> 全称: 沧源佤族自治县, 行政区划码: 530927000 行 83: 楚雄州 -> 全称: 楚雄彝族自治州, 行政区划码: 532300000 -行 84: 未找到 '楚雄市' 的相关信息 +行 84: 楚雄市 -> 全称: 楚雄市, 行政区划码: 532301000 行 85: 禄丰市 -> 全称: 禄丰县, 行政区划码: 532331000 -行 86: 未找到 '双柏县' 的相关信息 -行 87: 未找到 '牟定县' 的相关信息 -行 88: 未找到 '南华县' 的相关信息 -行 89: 未找到 '姚安县' 的相关信息 -行 90: 未找到 '大姚县' 的相关信息 -行 91: 未找到 '永仁县' 的相关信息 -行 92: 未找到 '元谋县' 的相关信息 -行 93: 未找到 '武定县' 的相关信息 +行 86: 双柏县 -> 全称: 双柏县, 行政区划码: 532322000 +行 87: 牟定县 -> 全称: 牟定县, 行政区划码: 532323000 +行 88: 南华县 -> 全称: 南华县, 行政区划码: 532324000 +行 89: 姚安县 -> 全称: 姚安县, 行政区划码: 532325000 +行 90: 大姚县 -> 全称: 大姚县, 行政区划码: 532326000 +行 91: 永仁县 -> 全称: 永仁县, 行政区划码: 532327000 +行 92: 元谋县 -> 全称: 元谋县, 行政区划码: 532328000 +行 93: 武定县 -> 全称: 武定县, 行政区划码: 532329000 行 94: 红河州 -> 全称: 红河哈尼族彝族自治州, 行政区划码: 532500000 -行 95: 未找到 '个旧市' 的相关信息 -行 96: 未找到 '开远市' 的相关信息 -行 97: 未找到 '蒙自市' 的相关信息 -行 98: 未找到 '弥勒市' 的相关信息 +行 95: 个旧市 -> 全称: 个旧市, 行政区划码: 532501000 +行 96: 开远市 -> 全称: 开远市, 行政区划码: 532502000 +行 97: 蒙自市 -> 全称: 蒙自市, 行政区划码: 532503000 +行 98: 弥勒市 -> 全称: 弥勒市, 行政区划码: 532504000 行 99: 屏边县 -> 全称: 屏边苗族自治县, 行政区划码: 532523000 -行 100: 未找到 '建水县' 的相关信息 -行 101: 未找到 '石屏县' 的相关信息 -行 102: 未找到 '泸西县' 的相关信息 -行 103: 未找到 '元阳县' 的相关信息 -行 104: 未找到 '红河县' 的相关信息 +行 100: 建水县 -> 全称: 建水县, 行政区划码: 532524000 +行 101: 石屏县 -> 全称: 石屏县, 行政区划码: 532525000 +行 102: 泸西县 -> 全称: 泸西县, 行政区划码: 532527000 +行 103: 元阳县 -> 全称: 元阳县, 行政区划码: 532528000 +行 104: 红河县 -> 全称: 红河县, 行政区划码: 532529000 行 105: 金平县 -> 全称: 金平苗族瑶族傣族自治县, 行政区划码: 532530000 行 106: 绿春县 -> 全称: 绿春县, 行政区划码: 532531000 行 107: 河口县 -> 全称: 河口瑶族自治县, 行政区划码: 532532000 行 108: 文山州 -> 全称: 文山壮族苗族自治州, 行政区划码: 532600000 -行 109: 未找到 '文山市' 的相关信息 -行 110: 未找到 '砚山县' 的相关信息 -行 111: 未找到 '西畴县' 的相关信息 -行 112: 未找到 '麻栗坡县' 的相关信息 -行 113: 未找到 '马关县' 的相关信息 -行 114: 未找到 '丘北县' 的相关信息 -行 115: 未找到 '广南县' 的相关信息 -行 116: 未找到 '富宁县' 的相关信息 +行 109: 文山市 -> 全称: 文山市, 行政区划码: 532601000 +行 110: 砚山县 -> 全称: 砚山县, 行政区划码: 532622000 +行 111: 西畴县 -> 全称: 西畴县, 行政区划码: 532623000 +行 112: 麻栗坡县 -> 全称: 麻栗坡县, 行政区划码: 532624000 +行 113: 马关县 -> 全称: 马关县, 行政区划码: 532625000 +行 114: 丘北县 -> 全称: 丘北县, 行政区划码: 532626000 +行 115: 广南县 -> 全称: 广南县, 行政区划码: 532627000 +行 116: 富宁县 -> 全称: 富宁县, 行政区划码: 532628000 行 117: 西双版纳州 -> 全称: 西双版纳傣族自治州, 行政区划码: 532800000 -行 118: 未找到 '景洪市' 的相关信息 -行 119: 未找到 '勐海县' 的相关信息 -行 120: 未找到 '勐腊县' 的相关信息 +行 118: 景洪市 -> 全称: 景洪市, 行政区划码: 532801000 +行 119: 勐海县 -> 全称: 勐海县, 行政区划码: 532822000 +行 120: 勐腊县 -> 全称: 勐腊县, 行政区划码: 532823000 行 121: 大理州 -> 全称: 大理白族自治州, 行政区划码: 532900000 -行 122: 未找到 '大理市' 的相关信息 +行 122: 大理市 -> 全称: 大理市, 行政区划码: 532901000 行 123: 漾濞县 -> 全称: 漾濞彝族自治县, 行政区划码: 532922000 -行 124: 未找到 '祥云县' 的相关信息 -行 125: 未找到 '宾川县' 的相关信息 -行 126: 未找到 '弥渡县' 的相关信息 +行 124: 祥云县 -> 全称: 祥云县, 行政区划码: 532923000 +行 125: 宾川县 -> 全称: 宾川县, 行政区划码: 532924000 +行 126: 弥渡县 -> 全称: 弥渡县, 行政区划码: 532925000 行 127: 南涧县 -> 全称: 南涧彝族自治县, 行政区划码: 532926000 行 128: 巍山县 -> 全称: 巍山彝族回族自治县, 行政区划码: 532927000 -行 129: 未找到 '永平县' 的相关信息 -行 130: 未找到 '云龙县' 的相关信息 -行 131: 未找到 '洱源县' 的相关信息 -行 132: 未找到 '剑川县' 的相关信息 -行 133: 未找到 '鹤庆县' 的相关信息 +行 129: 永平县 -> 全称: 永平县, 行政区划码: 532928000 +行 130: 云龙县 -> 全称: 云龙县, 行政区划码: 532929000 +行 131: 洱源县 -> 全称: 洱源县, 行政区划码: 532930000 +行 132: 剑川县 -> 全称: 剑川县, 行政区划码: 532931000 +行 133: 鹤庆县 -> 全称: 鹤庆县, 行政区划码: 532932000 行 134: 德宏州 -> 全称: 德宏傣族景颇族自治州, 行政区划码: 533100000 -行 135: 未找到 '瑞丽市' 的相关信息 -行 136: 芒市 -> 全称: 芒市市, 行政区划码: 533103000 -行 137: 未找到 '梁河县' 的相关信息 -行 138: 未找到 '盈江县' 的相关信息 -行 139: 未找到 '陇川县' 的相关信息 +行 135: 瑞丽市 -> 全称: 瑞丽市, 行政区划码: 533102000 +行 136: 芒市 -> 全称: 芒市, 行政区划码: 533103000 +行 137: 梁河县 -> 全称: 梁河县, 行政区划码: 533122000 +行 138: 盈江县 -> 全称: 盈江县, 行政区划码: 533123000 +行 139: 陇川县 -> 全称: 陇川县, 行政区划码: 533124000 行 140: 怒江州 -> 全称: 怒江傈僳族自治州, 行政区划码: 533300000 -行 141: 未找到 '泸水市' 的相关信息 -行 142: 未找到 '福贡县' 的相关信息 +行 141: 泸水市 -> 全称: 泸水市, 行政区划码: 533301000 +行 142: 福贡县 -> 全称: 福贡县, 行政区划码: 533323000 行 143: 贡山县 -> 全称: 贡山独龙族怒族自治县, 行政区划码: 533324000 行 144: 兰坪县 -> 全称: 兰坪白族普米族自治县, 行政区划码: 533325000 行 145: 迪庆州 -> 全称: 迪庆藏族自治州, 行政区划码: 533400000 -行 146: 未找到 '香格里拉市' 的相关信息 -行 147: 未找到 '德钦县' 的相关信息 +行 146: 香格里拉市 -> 全称: 香格里拉市, 行政区划码: 533401000 +行 147: 德钦县 -> 全称: 德钦县, 行政区划码: 533422000 行 148: 维西县 -> 全称: 维西傈僳族自治县, 行政区划码: 533423000 进程已结束,退出代码为 0 diff --git a/Util/AreaUtil.py b/Util/AreaUtil.py index c88dabd..55bd375 100644 --- a/Util/AreaUtil.py +++ b/Util/AreaUtil.py @@ -36,7 +36,7 @@ def load_jiancheng_data(): def load_yunnan_area_data(): - """加载云南省行政区划完整数据""" + """加载云南省行政区划完整数据(非递归实现)""" area_path = os.path.join( os.path.dirname(os.path.dirname(__file__)), 'Dict', @@ -53,26 +53,30 @@ def load_yunnan_area_data(): print(f"错误:{area_path} 文件格式不正确") return {} - # 递归遍历所有行政区划节点 area_map = {} + # 1. 添加省级数据 + province_name = data.get('name') + province_code = data.get('code') + if province_name and province_code: + area_map[province_name] = {'full_name': province_name, 'area_code': province_code} - def traverse_nodes(nodes): - if isinstance(nodes, list): - for node in nodes: - traverse_nodes(node) - elif isinstance(nodes, dict): - # 提取名称和代码 - name = nodes.get('name') - code = nodes.get('code') or nodes.get('area_code') - if name and code: - area_map[name] = {'full_name': name, 'area_code': code} + # 2. 遍历城市和区县(非递归实现) + citys = data.get('citys', []) + for city in citys: + # 添加城市数据 + city_name = city.get('name') + city_code = city.get('code') + if city_name and city_code: + area_map[city_name] = {'full_name': city_name, 'area_code': city_code} - # 处理子节点 - children = nodes.get('children') - if children: - traverse_nodes(children) + # 添加区县数据 + areas = city.get('areas', []) + for area in areas: + area_name = area.get('name') + area_code = area.get('code') + if area_name and area_code: + area_map[area_name] = {'full_name': area_name, 'area_code': area_code} - traverse_nodes(data) return area_map @@ -82,23 +86,22 @@ def query_area_info(query_str): :param query_str: 简称或全称 :return: 包含full_name和area_code的字典,未找到返回None """ - # 修复:显式加载数据并初始化映射字典 abbrev_map, fullname_map = load_jiancheng_data() yunnan_area_map = load_yunnan_area_data() - # 1. 先查简称映射表 - if query_str in abbrev_map: - return abbrev_map[query_str] - - # 2. 再查完整行政区划数据 + # 1. 优先查询完整行政区划数据(最重要修正) if query_str in yunnan_area_map: return yunnan_area_map[query_str] - # 3. 最后查全称映射表 + # 2. 再查简称映射表(处理特殊名称) + if query_str in abbrev_map: + return abbrev_map[query_str] + + # 3. 最后查全称映射表+模糊匹配 if query_str in fullname_map: return fullname_map[query_str] - # 4. 尝试模糊匹配 + # 4. 模糊匹配保持不变 for name, info in yunnan_area_map.items(): if query_str in name or name in query_str: return info diff --git a/Util/__pycache__/AreaUtil.cpython-310.pyc b/Util/__pycache__/AreaUtil.cpython-310.pyc index 46e7e08..9185c2c 100644 Binary files a/Util/__pycache__/AreaUtil.cpython-310.pyc and b/Util/__pycache__/AreaUtil.cpython-310.pyc differ