不规范的地址处理是个麻烦的事。
在常用的6级行政划分(省市县乡村组)格式下,缺少部分的补全只是其中一部分的工作量,内容错误与略写的恢复也是很重要的处理内容。2004年我经手的一个项目,要对老系统的数据做迁移,其数据的规范化工作中有一个企业信息的处理,其中对于【深圳市工商行政管理局】这个营业执照办理机构,整个系统的手工录入数据里有160多种写法,有带【广东省】前缀的,有带【广东】前缀的,有【工商行政管理局】,有【工商管理局】,有【工商局】,甚至还有【工商行政管路局】等不一而足。
面对这样的数据,要么,将它们补全、规范化,要么,只能是忽略它们。
标准的6位行政编码是规范到县级,2000年时,全国有4000多个编码在使用,现在有3600+在使用。如果要处理不同时期的行政编码因【裁撤并分改】而产生的变化,也是相当大的工作量。
然后就只需要考虑缺失级别的补全工作了。
不能简单认为市级就一定是某某市,例如内蒙有很多市级的某某盟;
同样的某某市也不一定是市级,例如北京市(省级),都江堰市(县级);
在县级,有不少同名的,一些省会城市的下辖县级单位是某某区,而它们经常就有同名的,北京有朝阳区,长春有朝阳区,这都是县级的,同时,辽宁还有个朝阳市……
因此,【朝阳群众】到底是指哪里的群众,在没有上下文的情况下,还真不好说。
如果上述的所有问题都解决了,或者都不考虑,假定数据都是规范的完整地址,例如【湖南省株洲市茶陵县】或者【湖南省常德市津市市】这样的,要进行匹配就是很简单的事了。
在Python中,“City”可能是一个类、模块或变量的名称。如果“City”是一个类名,则表示“City”类;如果“City”是一个模块名,则表示“City”模块;如果“City”是一个变量名,则表示“City”变量。下面是一个简单的例子,展示了如何定义一个“City”类,并创建一个“City”对象:
class City:
# 定义城市名称和人口数量的属性
name = ''
population = 0
# 定义构造函数,用于初始化城市的属性
def __init__(self, name, population):
self.name = name
self.population = population
# 定义一个方法,用于输出城市的信息
def print_info(self):
print('城市名称:{0},人口数量:{1}'.format(self.name, self.population))
# 创建一个“City”对象
city = City('北京', 22000000)
# 调用对象的方法,输出城市的信息
city.print_info()
在这段代码中,“City”是一个类,定义了城市的名称和人口数量两个属性,并定义了一个构造函数和一个输出信息的方法。“city”是一个“City”类的实例,表示一个城市对象。
既然数据在EXCEL里面,用VBA来写是顺理成章的,VBA的好处是代码在EXCEL文件里面,比较友好的开发和调试环境,可以单步一行一行的执行代码,中途可以查看变量的值,便于更正程序,我初步写了一个VBA代码,方法是把文件另存为XLAM格式(带脚本的文件),按ALT+F11进入VBA环境,按CTRL+R打开工程管理器,插入模块,粘贴代码,如下图:
代码文件如下(有可能浏览器会偷吃特殊字符,一定结合上图):
Option Explicit
Sub 宏1()
Dim arr, i, j, p, f
arr = ActiveSheet.UsedRange
For i = 2 To UBound(arr)
'文件改名
p = "f:\downloads\1\" &arr(i, 1)
f = Dir(p &"*.jpg")
j = 1
While f <>""
Name p &f As p &arr(i, 2) &arr(i, 3) &j &".jpg"
f = Dir
j = j + 1
Wend
'文件夹改名
Name p As p &arr(i, 2)
Next i
End Sub