Python完整地址拆分-省-市-区\镇\县(jionlp库版本)+GUI

专栏导读

在这里插入图片描述

  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手

  • 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注

  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅

  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅

  • 📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅

  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏

  • ❤️ 欢迎各位佬关注! ❤️

库的安装

用途安装
jionlp地址拆分pip install jionlp -i https://pypi.tuna.tsinghua.edu.cn/simple/

re正则表达式

pattern = r'^(?P<province>.+?省)(?P<city>.+?市)(?P<district>.+?(镇|县|区|街道))(?:.+)?'

GUI测试版

import tkinter as tk
from tkinter import messagebox
import jionlp as jio


# 使用jionlp库解析地址
def parse_address(address):
    try:
        # 调用 jionlp 进行地址解析
        parsed_result = jio.parse_location(address)
        return parsed_result
    except Exception as e:
        messagebox.showerror("解析错误", f"地址解析失败: {e}")
        return None


# 点击解析按钮后的处理逻辑
def on_parse_click():
    address = entry_address.get()
    if not address:
        messagebox.showwarning("输入错误", "请输入地址")
        return

    parsed = parse_address(address)

    if parsed:
        entry_province.delete(0, tk.END)
        entry_province.insert(0, parsed["province"])  # 省

        entry_city.delete(0, tk.END)
        entry_city.insert(0, parsed["city"])  # 市

        entry_district.delete(0, tk.END)
        entry_district.insert(0, parsed.get("county", ""))  # 区/县,可能为空

        entry_town.delete(0, tk.END)
        entry_town.insert(0, parsed.get("town", ""))  # 镇/村,可能为空


# 创建主窗口
window = tk.Tk()
window.title("地址解析工具")

# 地址输入框
label_address = tk.Label(window, text="输入地址:")
label_address.grid(row=0, column=0, padx=5, pady=5)
entry_address = tk.Entry(window, width=50)
entry_address.grid(row=0, column=1, padx=5, pady=5)

# 解析按钮
btn_parse = tk.Button(window, text="解析地址", command=on_parse_click)
btn_parse.grid(row=0, column=2, padx=5, pady=5)

# 省
label_province = tk.Label(window, text="省:")
label_province.grid(row=1, column=0, padx=5, pady=5)
entry_province = tk.Entry(window)
entry_province.grid(row=1, column=1, padx=5, pady=5)

# 市
label_city = tk.Label(window, text="市:")
label_city.grid(row=2, column=0, padx=5, pady=5)
entry_city = tk.Entry(window)
entry_city.grid(row=2, column=1, padx=5, pady=5)

# 区/县
label_district = tk.Label(window, text="区/县:")
label_district.grid(row=3, column=0, padx=5, pady=5)
entry_district = tk.Entry(window)
entry_district.grid(row=3, column=1, padx=5, pady=5)

# 镇/村
label_town = tk.Label(window, text="镇/村:")
label_town.grid(row=4, column=0, padx=5, pady=5)
entry_town = tk.Entry(window)
entry_town.grid(row=4, column=1, padx=5, pady=5)

# 运行主循环
window.mainloop()


完整实战版

# -*- coding: UTF-8 -*-
'''
@Project :测试 
@File    :选择版.py
@IDE     :PyCharm 
@Author  :一晌小贪欢(278865463@qq.com)
@Date    :2024/9/7 下午12:23 
'''

import tkinter as tk
from tkinter import filedialog, messagebox
import pandas as pd
import jionlp as jio
import os


# 使用jionlp库解析地址
def parse_address(address):
    try:
        # 调用 jionlp 进行地址解析
        parsed_result = jio.parse_location(address)
        return parsed_result
    except Exception as e:
        print(f"地址解析失败: {e}")
        return None


# 处理Excel文件
def process_excel(file_path):
    # 读取Excel文件中的地址列 (假设在A列)
    try:
        df = pd.read_excel(file_path)
        if '地址' not in df.columns:
            messagebox.showwarning("格式错误", "Excel文件中找不到名为'地址'的列")
            return

        # 创建解析结果的列表
        province_list = []
        city_list = []
        district_list = []
        town_list = []

        for address in df['地址']:
            parsed = parse_address(address)
            if parsed:
                province_list.append(parsed.get("province", ""))
                city_list.append(parsed.get("city", ""))
                district_list.append(parsed.get("county", ""))
                town_list.append(parsed.get("town", ""))
            else:
                province_list.append("")
                city_list.append("")
                district_list.append("")
                town_list.append("")

        # 将解析后的结果添加到新的列
        df['省'] = province_list
        df['市'] = city_list
        df['区/县'] = district_list
        df['镇/村'] = town_list

        # 保存结果到新的Excel文件
        save_path = os.path.splitext(file_path)[0] + "_解析结果.xlsx"
        df.to_excel(save_path, index=False)
        messagebox.showinfo("处理完成", f"地址解析完成!结果已保存到: {save_path}")

    except Exception as e:
        messagebox.showerror("处理错误", f"处理Excel文件时出错: {e}")


# 选择文件的处理逻辑
def select_file():
    file_path = filedialog.askopenfilename(
        title="选择Excel文件",
        filetypes=[("Excel files", "*.xlsx *.xls")]
    )
    if file_path:
        process_excel(file_path)


# 创建主窗口
window = tk.Tk()
window.title("地址解析工具 - Excel版")

# 创建选择文件按钮
btn_select_file = tk.Button(window, text="选择Excel文件", command=select_file)
btn_select_file.pack(padx=20, pady=20)

# 运行主循环
window.mainloop()

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 🤞 关注 🤞

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 👍 收藏 👍

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小庄-Python办公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值