百度地圖點集文檔使用python的re模塊處理成json的相關寫法

這個實在很差起名字。寫這個還不是由於被渣度坑的不要不要的。爲何說他坑呢。參考一下這兩個截圖的txt文檔:php

 

文檔資源下載地址:  http://lbsyun.baidu.com/index.php?title=open/dev-reshtml

或  http://lbsyun.baidu.com/index.php?title=webapi/place-suggestion-apipython

不知道是否看出坑的地方在哪裏(請參考官方示例 http://echarts.baidu.com/demo.html#map-polygon):程序員

1.js格式的數據不作格式化。這個我勉強能夠理解。可是百度地圖的demo裏面使用的數據可不是這樣的。因此這份文件不處理就沒*用。至於這個js處理的坑點晚些再說web

2.看看右邊那個文檔。不僅是百度,從主要渠道下載的全國行政區劃明細列表,都是會對於行政單位加上行政級別——例如北京市,上海市。而不是北京,上海。api

3.附上官方示例上的接口API內容:echarts

 

 

很少吐槽了。槽點實在太多。編輯器

那麼進入正題,老樣子,先上代碼。優化

代碼中有段非re處理的部分,用re的話大概只能寫成這樣。由於sub模塊替換時不支持通配。3d

 

完整代碼以下:

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.輸出結果

 

 

----------------------------------

百度的這份文檔,絕對是爲了展示程序員的核心價值。

因此你不能用文本編輯器一次性解決這個問題。

相關文章
相關標籤/搜索