第四周--数据清洗(添加省市区)

利用python为地名匹配省市区,

设计思想:利用百度api实现定位经纬度,然后再通过经纬度匹配省市区

 

1.从文本中读取地点名称

#提取地区
def diqu():
    f = codecs.open('kjcg.txt', mode='r', encoding='utf-8')  # 打开txt文件,以‘utf-8’编码读取
    line = f.readline()   # 以行的形式进行读取文件
    while line:
        a = line.split()
        b = a[0:1]   # 这是选取需要读取的位数
        list.append(b)  # 将其添加在列表之中
        line = f.readline()
    f.close()

 

2.调用百度api实现  地点------经纬度

#提取经纬度
def geocodeB(address):
    """
    @ address: 名称字符串
    @ 返回值:经度,纬度
    """
    base_url = "http://api.map.baidu.com/geocoder?address={address}&output=json&key=您的密钥".format(address=address)

    response = requests.get(base_url)
    answer = response.json()
    latitude = answer['result']['location']['lng'] #
    longitude = answer['result']['location']['lat'] #

    list_lag.append(latitude)
    list_lng.append(longitude)

 

3.同样利用百度api   经纬度-------省市区

#提取省,市,区
#基于百度地图API下的经纬度信息来解析地理位置信息

def getlocation(lat,lng):

    url = requests.get('http://api.map.baidu.com/geocoder?location=' + lat + ',' + lng + '&output=json&key=您的密钥')
    result = url.json()
    #print(result)
    city = result['result']['addressComponent']['city']
    province = result['result']['addressComponent']['province']
    district = result['result']['addressComponent']['district']
    # print(city,province,district)
    list_all= [
        '\n' + result['result']['addressComponent']['city'] + ',' +
        result['result']['addressComponent']['province'] + ',' +
        result['result']['addressComponent']['district']]

    print(list_all)

 

4.数据存储(将list转换为字符串存储到文本文件中)

res_all = ','.join(list_all)
    with open('科技成果地区划分.txt', 'a+', encoding="utf-8") as f:
        f.write(res_all)

 

效果展示:(待转换数据------转换数据)(但是不知道为什么通过api双向转换出来的数据有些对不上)

比如 天津科技大学:天津市河西区大沽南路1038号 

但是通过百度api实现出来的就是北京

 

 

 

posted @ 2020-03-12 23:53  birdmmxx  阅读(523)  评论(0编辑  收藏  举报