专栏导读

-
🌸 欢迎来到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
def parse_address(address):
try:
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()
完整实战版
'''
@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
def parse_address(address):
try:
parsed_result = jio.parse_location(address)
return parsed_result
except Exception as e:
print(f"地址解析失败: {e}")
return None
def process_excel(file_path):
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
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()
总结
-
希望对初学者有帮助
-
致力于办公自动化的小小程序员一枚
-
希望能得到大家的【一个免费关注】!感谢
-
求个 🤞 关注 🤞
-
-
求个 ❤️ 喜欢 ❤️
-
-
求个 👍 收藏 👍
-