利用PYTHON匹配提取EXCEL表的省市区,有偿?

Python015

利用PYTHON匹配提取EXCEL表的省市区,有偿?,第1张

不规范的地址处理是个麻烦的事。

在常用的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