Python快递分拣工具
这是快递分拣工具输入地址按设定的规则自动匹配到对应的配送站点。python# -*- coding: utf-8 -*-快递按收货地址自动分拣核心思路:每条规则描述一个站点负责的范围(省/市/区 关键词),分拣时对所有规则打分,取「优先级最高、匹配最精确」的那条。import refrom collections import defaultdictfrom dataclasses import dataclassfrom typing import Iterable, List, Optional, Sequence, Tuple# ---------------- 1. 地址归一化 ----------------_FULL_TO_HALF str.maketrans(,0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,)def normalize(address: str) - str:全角转半角 去掉空白和常见分隔符,让「北京市 朝阳区」「北京市,朝阳区」和「北京市朝阳区」等价。if not address:return s address.translate(_FULL_TO_HALF)return re.sub(r[\s,.。;、\-—_/\\|()【】\[\]], , s)# ---------------- 2. 分拣规则 ----------------dataclassclass Rule:一条分拣规则:某个站点负责的地址范围site: str # 目标配送站 / 分拨中心province: str city: str district: str keywords: Tuple[str, ...] () # 街道、乡镇、园区等priority: int 0 # 越大越优先,用于强制覆盖def __post_init__(self):# 规则里的地址同样要归一化,保证和收件地址同一套写法self.province normalize(self.province)self.city normalize(self.city)self.district normalize(self.district)self.keywords tuple(normalize(k) for k in self.keywords if k)def match_score(self, addr: str) - Optional[int]:addr 必须已归一化。命中返回得分(越高越精确),不命中返回 None。打分逻辑:- 规则里填写的省 / 市 / 区,必须全部出现在地址中(硬约束);- 命中的层级越多,分数越高(省 100、市 50、区 20);- 关键词每命中一个 5,用于同区内再细分。if not any((self.province, self.city, self.district, self.keywords)):return Nonescore 0for value, weight in ((self.province, 100), (self.city, 50), (self.district, 20)):if value:if value not in addr:return Nonescore weightfor kw in self.keywords:if kw in addr:score 5return score or None# ---------------- 3. 分拣器 ----------------dataclassclass SortResult:address: strsite: strmatched: boolrule: Optional[Rule] Noneclass AddressSorter:def __init__(self, rules: Sequence[Rule], default_site: str 人工分拣区):self.rules list(rules)self.default_site default_sitedef sort(self, address: str) - SortResult:addr normalize(address)best_rule, best_key None, Nonefor rule in self.rules:score rule.match_score(addr)if score is None:continuekey (rule.priority, score) # 先比优先级,再比精确度if best_key is None or key best_key: # 同分时先注册的规则胜出best_rule, best_key rule, keyif best_rule is None:return SortResult(address, self.default_site, False, None)return SortResult(address, best_rule.site, True, best_rule)def sort_batch(self, addresses: Iterable[str]) - List[SortResult]:return [self.sort(a) for a in addresses]# ---------------- 4. 规则配置 使用示例 ----------------RULES: List[Rule] [# 北京:朝阳区内再细分出「望京站」Rule(site北京-望京站, province北京, city北京, district朝阳区,keywords(望京, 酒仙桥, 大山子, 阜通, 来广营)),Rule(site北京-朝阳站, province北京, city北京, district朝阳区),Rule(site北京-海淀站, province北京, city北京, district海淀区),# 上海Rule(site上海-虹桥站, province上海, city上海, district闵行区,keywords(虹桥, 华漕, 七宝)),Rule(site上海-浦东站, province上海, city上海, district浦东新区),# 广东Rule(site广州-天河站, province广东, city广州, district天河区),Rule(site深圳-南山站, province广东, city深圳, district南山区),# 注意:全国有两个「朝阳」——靠省市区三级约束区分Rule(site辽宁-朝阳站, province辽宁, city朝阳, district双塔区),]if __name__ __main__:sorter AddressSorter(RULES, default_site北京-人工分拣)addresses [北京市朝阳区望京街道阜通东大街6号,北京市朝阳区建国路88号SOHO现代城,北京市海淀区中关村大街1号,上海市闵行区虹桥火车站出发层,上海市浦东新区世纪大道100号,广东省广州市天河区体育西路103号,广东省深圳市南山区科技园南区,辽宁省朝阳市双塔区新华路1号,火星基地一号舱, # 匹配不到 → 兜底]results sorter.sort_batch(addresses)print( 逐单分拣结果 )for r in results:flag ✔ if r.matched else ✘print(f{flag} {r.address} - {r.site})print(\n 按站点汇总(实际装车用))groups defaultdict(list)for r in results:groups[r.site].append(r.address)for site, addrs in groups.items():print(f\n【{site}】共 {len(addrs)} 单)for a in addrs:print(f - {a})分拣逻辑与操作说明这段代码就像一个智能分拣员收到地址后按您定义的规则自动匹配站点并给出最终去向。· 地址归一化先把全角字符、空格和标点统一成半角并去掉分隔符避免“北京市 朝阳区”和“北京市朝阳区”被当成不同地址。· 规则匹配每条规则包含省、市、区、关键词和优先级省市区必须全部命中才有效命中的层级越多得分越高关键词每命中一个再加分。· 判定与兜底所有规则中得分最高且优先级最高的胜出如果没有任何规则命中自动归入“人工分拣区”。· 结果展示逐单显示匹配结果✔或✘并按站点汇总每个配送站需要装车的订单。---优化建议 规则配置集中在代码末尾的 RULES 列表中可以按同样的格式增删站点和区域批量测试地址就在下面的 addresses 列表里修改。文章仅供参考用。

相关新闻

Unity像素化效果实现:后处理、URP与对象级Shader三方案详解

Unity像素化效果实现:后处理、URP与对象级Shader三方案详解

给 Unity 相机画面加像素化效果,通常不是为了把画面变模糊,而是为了把采样精度压下来:让屏幕变成一格一格的低分辨率画面,带出强烈的复古感或合成感。这个需求在 VFX 里非常常见——转场、隐私遮挡、像素风角色登场、老电视信号受…

2026/10/10 20:00:30 阅读更多 →
程序员必修的数理逻辑实战指南:从命题逻辑到可计算性

程序员必修的数理逻辑实战指南:从命题逻辑到可计算性

简介:这是一份专为计算机科学专业学生打造的数理逻辑核心考点复习笔记,聚焦形式化推理能力培养,解决课程学习、期末备考与考研基础夯实中的概念抽象、公式结构难理解、归纳证明不熟练等痛点。资源为单文件PDF,共1个869KB的高清笔记…

2026/10/10 20:47:06 阅读更多 →
jSignature移动端横屏签名板源码解析与真机避坑指南

jSignature移动端横屏签名板源码解析与真机避坑指南

简介:这套H5横屏签名源码基于jSignature插件实现,完整可直接运行,面向Web前端开发者与需要快速接入电子签名功能的项目团队,重点解决手机横屏状态下手写签名采集、实时回显与图片导出等问题。资源包共69个文件,压缩后仅…

2026/10/9 18:09:46 阅读更多 →

最新新闻

纯Java手写TopoJSON生成器:从GeoJSON到拓扑压缩的完整实践

纯Java手写TopoJSON生成器:从GeoJSON到拓扑压缩的完整实践

做 WebGIS 的同学这两年应该对 TopoJSON 不陌生,尤其当你需要把全省县级行政区划、全国路网这类动不动几十 MB 的 GeoJSON 塞进浏览器时,TopoJSON 几乎成了绕不开的选项。它的核心价值只有一句话:在拓扑关系上做文章,让共享边界只…

2026/10/10 20:47:31 阅读更多 →
Spring Boot+MyBatis Plus游戏分享网站毕设全流程实战解析

Spring Boot+MyBatis Plus游戏分享网站毕设全流程实战解析

每年的毕业设计季,总能看到一批同学被“选题”折磨得焦头烂额。游戏分享网站这种项目,听起来难度适中、事务清晰,特别适合拿来当计算机专业的毕设项目,但实际动起手来,从技术栈选型到功能模块拆解,再到部署…

2026/10/10 20:47:31 阅读更多 →
给 AI 生成 UI 上“护栏“:json-render 白名单配置从零到生产

给 AI 生成 UI 上“护栏“:json-render 白名单配置从零到生产

给 AI 生成 UI 上"护栏":json-render 白名单配置从零到生产 【免费下载链接】json-render The Generative UI framework 项目地址: https://gitcode.com/GitHub_Trending/js/json-render 2026 年初,Vercel Labs 开源的 json-render 在短…

2026/10/10 20:47:31 阅读更多 →
用NAS把收藏夹文章变成专属播客:搭建指南

用NAS把收藏夹文章变成专属播客:搭建指南

我猜你八成也有这么个毛病:看到一篇好文章先收藏,想着“回头认真读”,结果这个“回头”就是永远。收藏夹里堆了几百篇深度长文,从AI技术、投资分析到历史考据,什么都有,就是没有时间去读。直到有天我在通勤…

2026/10/10 20:47:31 阅读更多 →
把“留痕“当一等公民:金融智能体的审计设计为什么比模型能力更烧钱

把“留痕“当一等公民:金融智能体的审计设计为什么比模型能力更烧钱

把"留痕"当一等公民:金融智能体的审计设计为什么比模型能力更烧钱 【免费下载链接】financial-services 可将 Claude 转变为金融服务专家,适用于投资银行、股票研究等领域。提供核心及专项插件,支持端到端工作流,集成多…

2026/10/10 20:47:31 阅读更多 →
基于Java的校园二手智能交易平台APP开发全攻略

基于Java的校园二手智能交易平台APP开发全攻略

1. 项目到底在做什么:需求与定位拆解每年毕业设计季,“校园二手交易平台”这类题目都是常青树,但今年我带着学生把“基于Java的校园二手智能交易平台APP”完整做成可运行系统时,发现很多人对这个题目的理解还停留在十年前&#xf…

2026/10/10 20:46:30 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →