百度地图点集文档使用python的re模块处理成json的相关写法
这个实在不好起名字。写这个还不是因为被渣度坑的不要不要的。为什么说他坑呢。参考一下这两个截图的txt文档:

文档资源下载地址: http://lbsyun.baidu.com/index.php?title=open/dev-res
或 http://lbsyun.baidu.com/index.php?title=webapi/place-suggestion-api
不知道是否看出坑的地方在哪里(请参考官方示例 http://echarts.baidu.com/demo.html#map-polygon):
1.js格式的数据不做格式化。这个我勉强可以理解。但是百度地图的demo里面使用的数据可不是这样的。所以这份文件不处理就没*用。至于这个js处理的坑点晚些再说
2.看看右边那个文档。不只是百度,从主要渠道下载的全国行政区划明细列表,都是会对于行政单位加上行政级别——例如北京市,上海市。而不是北京,上海。
3.附上官方示例上的接口API内容:

不多吐槽了。槽点实在太多。
那么进入正题,老样子,先上代码。
代码中有段非re处理的部分,用re的话大概只能写成这样。因为sub模块替换时不支持通配。

完整代码如下:
import re
f = open('D:\\Users\\50255\\Desktop\\maplist.txt', encoding='utf-8')
txt = f.read()
# pattern = re.compile(r'"\w{2,6}"|\d+\W\d+\W\d+\W\d+')
# result = re.findall(pattern, txt)
def test_split(txt, string):
if type(txt) is not str:
txt = ''.join(txt)
txt = re.split(string, txt)
txt = ''.join(txt)
return txt
def test_replace(txt, r, f):
if type(txt) is not str:
txt = ''.join(txt)
txt = re.sub(r, f, txt)
txt = ''.join(txt)
return txt
txt = test_replace(txt, r'{n:"', r'{"')
txt = test_replace(txt, r',g:"', r',"')
txt = test_replace(txt, r'\|.{1,2}"}', r'"}')
txt = re.findall(r'{"\w+",.{1,30}\d\d"}', txt)
txt = test_replace(txt, r'{"', r'"')
txt = test_replace(txt, r'","', r'":[')
txt = test_replace(txt, r'"}', r'],\n')
txt = test_replace(txt, r'":', r'市":')
txt = test_replace(txt, r'市市', r'市')
txt = test_replace(txt, r'区市', r'区')
txt = test_replace(txt, r'州市', r'州')
_txt = list(txt)
for i in range(len(_txt)):
if _txt[i-1] == '"' and _txt[i+1] == '州':
_txt[i+1] = '州市'
txt = ''.join(_txt)
print(txt)
h = open('D:\\Users\\50255\\Desktop\\maplist2.txt', mode='w', encoding='utf-8')
h.write(txt)
因为只是用了一次。所以没有对上面那一堆replace的效率优化。优化的部分只有截图那一块,那个效率实在有点看不下去。
通过内容可以看出需要替换掉的部分。而且为了保证数据的正确处理。按以下步骤执行脚本:
0.初始化
1.去除需要的数据中的键值命名 --- n: g:
2.去除数据中不知道代表什么分类的 |12
3.取出需要的,括号内的数据
4.将数据格式化为目标样式
5.给数据加上行政区划级别
6.对于特殊的城市名称进行处理
7.输出结果
----------------------------------
百度的这份文档,绝对是为了展现程序员的核心价值。
所以你不能用文本编辑器一次性解决这个问题。
百度地图点集文档使用python的re模块处理成json的相关写法的更多相关文章
- 百度地图api文档实现任意两点之间的最短路线规划
两个点之间的路线是使用“Marker”点连接起来的,目前还没找到改变点颜色的方法,测试过使用setStyle没有效果. <html><head> <meta http-e ...
- 利用python将excel数据解析成json格式
利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...
- 必应地图api文档,微软必应地图web开发版详解,可以在国内使用国外地图
最近,公司项目要求在页面中嵌入地图,需求还算简单,但是由于必须具备响应式(主要是pc和移动端),而且由于公司业务是全球性的,要支持国外地点搜索.考虑到百度,腾讯,高德等等国内地图无法显示国外数据,谷歌 ...
- [同步到 MaixPy3 文档] 使用 Python 编程入门开源硬件项目
本文是给有一点 Python 基础但还想进一步深入的同学,有经验的开发者建议跳过. 前言 在写这篇案例系列的时候 junhuanchen 期望能够引导用户如何成为专业的开发者,不是只会调用代码就好,所 ...
- Silverlight类百度文库在线文档阅读器
百度文库阅读器是基于Flash的,用Silverlight其实也可以做. 我实现的在线阅读器可以应用于内网文档发布,在线阅览审批等.没有过多的堆积功能,专注于核心功能.主要有以下特性: 1. 基于XP ...
- Silverlight类百度文库在线文档阅读器(转)
百度文库阅读器是基于Flash的,用Silverlight其实也可以做. 我实现的在线阅读器可以应用于内网文档发布,在线阅览审批等.没有过多的堆积功能,专注于核心功能.主要有以下特性: 1. 基于XP ...
- word文档的python解析
主要两块,第一个是文件类型的转换,第二个是用docx包去对word文档中的table进行parse 1. 文件格式装换 因为很多各种各样的原因,至今还有一些word文档是doc的格式存的,对于这种,如 ...
- 地图API文档
目录 腾讯地图API 2 1.API概览... 2 1.1 WebService API(官网注明是beta版本,可能不稳定,慎用):... 2 1.2 URL API:... 2 1.3 静态图AP ...
- C# 读取ini文件 百度问问学习文档
C# 读取ini文件 10 有多个section,现想读取整个ini文件和指定section下所有内容 补充: 发布答案可以,请对准题目啊,我不要指定节点的内容,我知道!我要的是读取指定区域的内容,假 ...
随机推荐
- http下载网页
//http.c #include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/ ...
- 通过hibernate封装数据库持久化过程回顾泛型/继承/实现等概念
前言 在开发过程中,我们不难发现,客户的需求以及产品的定位对开发内容的走向有很大的决策作用,而这些往往需要在一开始就尽可能考虑周全和设计完善.为什么说是尽可能,因为我们都知道,需求这种东西,一言难尽. ...
- 重构手法之Extrct Method(提炼函数)
返回总目录 本节包含3个手法: 1.Extract Method(提炼函数) 2.Inline Method(内联函数) 3.Inline Temp(内联临时变量) Extract Method(提炼 ...
- HTML基础--元素类型及类型转换
元素类型及类型转换 一.XHTML元素分类 根据css显示分类,XHTML元素被分为三种类型:块状元素,内联元素,可变元素 1.块状元素(block element) 1)块状元素在网页中就是以块的形 ...
- [转]Android应用安装包apk文件的反编译与重编译、重签名
背景介绍: 最近在做Robotium自动化测试,使用到solo.takeScreenshot()函数以在测试过程中截图,但此函数需要被测试APP具有<uses-permission androi ...
- Linux系列教程(二十四)——Linux的系统管理
上篇博客介绍了Linux的服务管理,不管是以RPM包安装的服务,还是通过源码包安装的服务,万能启动服务的方法都可以通过 /绝对路径/启动脚本名 start .而通过 RPM 包安装的服务还可以通过 s ...
- Python 动态导入模块
动态导入模块 目录结构: zhangsandeMacBook-Air:1110 zhangsan$ tree . . ├── lib │ └── aa.py ├── test1.py lib目录下 ...
- 如何实现MDI窗体不重复打开同一个子窗体?
使用MDI窗体时,默认是可以多次打开同一个子窗体的,那么如何控制不重复打开同一个子窗体呢?MDI窗体有个重要属性——MdiChildren,该属性表示MDI窗体打开的子窗体的数组,循环遍历该数组,可以 ...
- 编程语言的基础——搞定JavaIO
关键字:IO基础,JUnit生命周期,字节流,字符流,字符编码,对象流,序列化,反序列化 Java I/O 流是一组有顺序的,有起点和终点的字节集合.是对设备文件间数据传输的总称和抽象. 在IO中涉及 ...
- C++反汇编第二讲,不同作用域下的构造和析构的识别
C++反汇编第二讲,不同作用域下的构造和析构的识别 目录大纲: 1.全局(静态)对象的识别,(全局静态全局一样的,都是编译期间检查,所以当做全局对象看即可.) 1.1 探究本质,理解构造和析构的生成, ...