首页 > 其他分享 >接上文,将完整地址信息和行政编码添加到原本数据新的一列中

接上文,将完整地址信息和行政编码添加到原本数据新的一列中

时间:2024-03-18 11:57:13浏览次数:25  
标签:编码 接上 地址 result codecs print line append 一列

1. 可以直接在txt文件中完成,也可以在数据库中完成,我通过txt完成,数据库需要注意更多方面的信息如导出的表应该多添加一列如添加一个原始地址,可以方便后期插入的时候where条件有可写内容,不然不管是插入还是更新都挺麻烦的,因为和原来的表中没有一列可以联系起来(我...)

上次我们处理后的数据如下

(完整地址信息)

 

(地址编码)

 原始表(接下来需要将上面两个信息插入到这个表中)

 实现代码:

"""
整合数据,将行政区代码、完整地址信息整合到原始表中
"""
import pandas as pd
import codecs

# 读取文本中指定的某一列数据
f1 = codecs.open('addlistrs.txt',mode='r',encoding='utf-8')
f2 = codecs.open('alllistrs.txt',mode='r',encoding='utf-8')
lines1 = f1.readlines()
lines2 = f2.readlines()
f2.close()
f1.close()
addlist=[]      # 完整地址信息
codelist = []    # 行政编码

for line in lines1:
    # print(line.strip())
    addlist.append(line.strip())
for line in lines2:
    codelist.append(line.strip().split(",")[3])
# print(codelist[1])


# 将这两个数据整合到test表中,导入一列数据:原文件每一行最后都要加一个数据
# 注意:w文件若存在,首先清空,然后(重新)创建
file_read = codecs.open('test.txt',mode='r',encoding='utf-8')
lines = file_read.readlines()
file_write = codecs.open('test.txt',mode='w',encoding='utf-8')    # 以可写模式打开该文件
i=0
for line in lines:
    # print(line.strip())
    line_new = line.strip()+ ',' + addlist[i] + ',' + codelist[i]+'\n'
    i += 1
    # print(line_new)
    file_write.write(line_new)

 

实现结果:

 

ok,接下来就是将上面的代码运用到真实的数据中了,上面是挑取的几个数据。。记得先备份一下,还有看清楚真实数据的格式是否和自己挑取规定的一样。

Python小坑:open()和codecs.open()区别,以及常见指令和操作指令_用codecs.open和open-CSDN博客

python 读取txt文件并在txt每行文件后面增加内容_python在文件某行后添加内容-CSDN博客

也素出现大问题好吧。。。

1.首先数组越界

所以去看原始数据,结果可能原本的数据有含有换行符之类的,导致这种情况的出现,看的我眼睛疼。。。类似于2950这一行,是上一行的数据来的,要手动修改。。。

 ok,眼瞎过后,也是成功了。。。好开心又可以加深近视辣太好辣。。。

2.地址可能是空的情况下,不应该继续调用百度接口进行地址编码或逆地址编码

添加判断即可,但是即使是空数据,也需要保存为空。

这里判断的时候,需要这样子写。

ok也是增加判断了没问题了,ok那么如果地址是一个乱七八糟的东西呢》》》,所以还是要解决返回失败的参数,这里是0 ,那我们就直接先判断他就好了。

 

 

 

修改一下代码,运行了一段时间,没有发现什么问题,但是我百度平台超余额了。。

就先做到这把,暂时没什么问题。。

实现代码如下:

# -*- coding: utf-8 -*-
"""
整合test1test2应用于原始的大量数据
给地址添加行政编码
"""
import codecs
import requests
import numpy as np

"""
抽取地址,调用接口查看该地址属于哪个省市区
"""
# 1.获取需要的地址数据
# def splittxt():
# f = codecs.open('t1_test_test.txt', mode='r', encoding='utf-8')
f = codecs.open('1234.txt', mode='r', encoding='utf-8')
lines = f.readlines()
list = []
lnglist = []  # 经度
latlist = []  # 维度
addlist = []  # 标准地址格式省市区
alllist=[]  # 将标准地址省市区组合在一起
codelist=[] # 存储行政编码

for line in lines:
    # print(line.strip().split("|")[15])
    list.append(line.strip().split("|")[15])
# f.close()
# print(list[0])


# 2.调用百度api实现提取地点的经纬度
def getJingWei(address):
    url = "https://api.map.baidu.com/geocoding/v3"
    params = {
        "address": address,
        "output": "json",
        "ak": "你的ak密钥",
    }
    response = requests.get(url=url, params=params)
    result = response.json()
    status=result['status']
    if(status!=0):
        addlist.append("")
        codelist.append("")
        lnglist.append("")
        latlist.append("")
        alllist.append("")
    else:
        lnglist.append(result['result']['location']['lng'])       # 经度
        latlist.append(result['result']['location']['lat'])        # 纬度


# 3.通过经纬度获取地址信息(省市区)
def getAddress(lng, lat):
    response = requests.get('https://api.map.baidu.com/reverse_geocoding/v3/?ak=你的ak密钥&output=json&coordtype=wgs84ll&location='+str(lat)+','+str(lng))
    # if response:
    #     print(response.json())
    result = response.json()
    # print(result)
    addlist.append(result['result']['formatted_address'])
    alllist.append(result['result']['addressComponent']['province']+','+result['result']['addressComponent']['city']+','+result['result']['addressComponent']['district']+','+result['result']['addressComponent']['adcode'])
    codelist.append(result['result']['addressComponent']['adcode'])

# 测试
for i in range(len(list)):
    # print(len(list[i]))
    # 注意不能写成list[i]==""或者len(list[i])==0,通过上一条代码可以看见长度为2.
    print(list[i])
    getJingWei(list[i])
    # 先判断一下地址编码是否成功,成功在进行下一步:获取完整的地址信息
    if (len(addlist)<i+1):
        getAddress(lnglist[i],latlist[i])
        # print("=====",addlist[i])


file_write = codecs.open('result.txt',mode='w',encoding='utf-8')    # 以可写模式打开该文件
i=0
for line in lines:
    # print(line.strip())
    # 根据实际的数据文件格式修改一下
    line_new = line.strip()+ '|"' + addlist[i] + '"|"' + codelist[i]+'"\n'
    i += 1
    # print(line_new)
    file_write.write(line_new)
f.close()
file_write.close()

文件写入应该没问题,之前小数据测试过。

 

标签:编码,接上,地址,result,codecs,print,line,append,一列
From: https://www.cnblogs.com/hmy22466/p/18066705

相关文章

  • 可编辑表格中的两个列分别是用react-hook-form 和antd的inputNumber实现的,需要在开始
    可编辑表格中的两个列分别是用react-hook-form和antd的inputNumber实现的,需要在开始时间的列输入后失焦时,或者按enter键,鼠标聚焦到下一列,即结束时间,该如何设置在React项目中,要实现在一个可编辑表格中,当开始时间列输入后失焦或按下Enter键时,自动将焦点切换至结束时间列,你可以结合......
  • 试用AI做方案设计,通义灵码——一个博学但“健忘”的智能编码辅助工具
    最近,人工智能编程领域的创新成果层出不穷,让我这个程序员跃跃欲试。今天,我终于决定亲自体验一下阿里云研发的智能编码助手——通义灵码,在我的VisualStudioCode编辑器中成功安装了这款插件,并顺利开启了它的功能。当我打开插件对话框并输入相关的设计需求或代码问题时,只需一......
  • 中文网址转url编码网址
    要将一个中文网址转换为url编码格式的网址,非常简单,只需要使用Windows提供的有一个函数即可。C++/Windows/ATL#include<atlutil.h>//。。。。。。。。。。。。。。。。。。。。{constTCHAR*val=_T("http://www.中文.com");DWORDlen=lstrlen(val)*3+1;......
  • Python chardet.detect 字符编码检测
    chardet.detect是Python的一个库,用于检测给定字节串的字符编码。其检测原理基于统计学方法。具体来说,chardet.detect使用了一种叫做统计字符n-gram(通常为n=1或n=2)的方法。它会统计字节串中每个字符或字符对出现的频率,并将这些统计结果与预先训练好的字符编码模型进行......
  • 从公司的code Review 中提升编码能力
    1、对于只有一个ifelse并且简单赋值可以用三元表达式优化修改之前:优化后:对于不变的并且结构很长的这种对象或数组,可以放到一个ts文件,通过引入的方式,这样代码看起来会代码更简洁明了2、用map映射替换重复判断的ifelse修改之前:优化后:对于重复的ifelse判断,可......
  • Transformer框架+编码器+解码器
    2024.3.14Transformer框架+编码器+解码器预训练----->NNLM----->word2vec------>ElMo--->AttentionNLP(自然语言处理)中预训练的目的,其实就是为了生成词向量transformer其实就是attention的一个堆叠Transformer的整体框架[Transformer框架]:对Transformer模型中各个结构的理......
  • stm32-编码器测速
    一、编码器简介 编码电机 旋转编码器 A,B相分别接通道一和二的引脚,VCC,GND接单片机VCC,GND二、正交编码器工作原理1.计数方式 2.框图分析 由图可知,只有CH1和CH2有编码器接口,且编码器只用到了输入捕获结构体的输入滤波和边沿检测器,则其余的结构体成员都不......
  • 大数据清洗二之增加行政编码和规范到去区或县
    我因为准备考研,所有就算抽空整整建民老师的大数据作业,今天在选修课上把第二阶段的规范到区和县还有增加行政区域编码。代码如下:importjsonimportpymysqlimportpandasaspdimportrequestsfromsqlalchemyimportcreate_engine#连接MySQL数据库conn=pymysql.conn......
  • 自学Python第一步,记住这7大编码规范
    一、缩进每一级缩进4个空格。续行应该与包裹元素对齐,要么使用圆括号,方括号,花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐。当使用挂行缩进对齐时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行。对齐缩进(左右括号对齐)deflong_function_name(var_......
  • C++windows编码问题
    需要注意的编码方式有三处:操作系统、程序编码(与源文件编码一致)、通信对方传入字符的编码程序编码(与源文件编码一致)操作系统编码对方传入的编码中文是否okc2A0编码的空格utf-8utf-8utf-8okokutf-8gbkgbk正常中文可以,特殊空......