第二张图是之前的格式,今天应一位网友的要求,将其处理为如下第三张图的格式。更贴近源文档,方便使用。
如图所示: 按 门类编码 门类名称 大类编码 大类名称 中类编码 中类名称 小类编码 小类名称 划分数据 , 一目了然!
源文件如下图所示:
数据源没有变化,只是处理了一下原来的格式,可以参见我的随笔:
https://www.cnblogs.com/rainbow-1/p/15474688.html
https://www.cnblogs.com/rainbow-1/p/15474688.html
这是处理的代码:
import pymysql
def get_conn():
"""
:return: 连接,游标
"""
# 创建连接
conn = pymysql.connect(host="127.0.0.1",
user="root",
password="reliable",
db="data_cleaning",
charset="utf8")
# 创建游标
cursor = conn.cursor() # 执行完毕返回的结果集默认以元组显示
return conn, cursor
def query(sql,*args):
"""
通用封装查询
:param sql:
:param args:
:return:返回查询结果 ((),())
"""
conn , cursor= get_conn()
print(sql)
cursor.execute(sql)
res = cursor.fetchall()
close_conn(conn , cursor)
return res
def close_conn(conn, cursor):
if cursor:
cursor.close()
if conn:
conn.close()
# 读取源数据表std_code_2017,拆分字段插到新的数据表national_industrial_code
def func_into_new_table() :
conn,cursor = get_conn() # 连接数据库data_cleaning
SQL = 'SELECT * FROM std_code_2017;'
res_data = query(SQL)
v_rate_type = '01'
v_rate_time = '2023'
# print(res_data[0])
# 分别处理 编码code 和名称name 处理一条插入一条
for item in res_data:
code = str(item[0]) # 编码如A0111
name = str(item[1]) # 名称如'门类·大类·中类·小类'
# 四级分类编码和名称分别从1~4 如下
code_1 = code[0:1] # 如 A
code_2 = code[1:3] # 如 01
code_3 = code[1:4] # 如 011
code_4 = code[1:5] # 如 0111
name_1 = name.split('·')[0]
name_2 = name.split('·')[1]
name_3 = name.split('·')[2]
name_4 = name.split('·')[3]
# 共11个字段需要插入,主键ID自增+两个固定字段+8个分类细节
SQL_NEW = 'insert into national_industrial_code (' \
'id,' \
'rate_type,' \
'rate_time,' \
'category_code,' \
'category_name,' \
'large_code,' \
'large_name,' \
'medium_code,' \
'medium_name,' \
'small_code,' \
'small_name)' \
'values(0,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
param = (v_rate_type,v_rate_time,code_1,name_1,
code_2,name_2,code_3,name_3,code_4,name_4)
cursor.execute(SQL_NEW,param)
# 提交
conn.commit()
close_conn(conn,cursor) # 关闭数据库
return 0
if __name__ == '__main__':
func_into_new_table()
新数据表结构:
CREATE TABLE `national_industrial_code` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`rate_type` char(2) NOT NULL COMMENT '统计方式: 01 年 02 季度 03 月',
`rate_time` varchar(8) NOT NULL COMMENT '统计时间: 年2023 季度2023-1 月份202303',
`category_code` varchar(8) NOT NULL COMMENT '门类编码',
`category_name` varchar(64) NOT NULL COMMENT '门类名称',
`large_code` varchar(8) DEFAULT NULL COMMENT '大类编码',
`large_name` varchar(64) DEFAULT NULL COMMENT '大类名称',
`medium_code` varchar(8) DEFAULT NULL COMMENT '中类编码',
`medium_name` varchar(64) DEFAULT NULL COMMENT '中类名称',
`small_code` varchar(8) DEFAULT NULL COMMENT '小类编码',
`small_name` varchar(64) DEFAULT NULL COMMENT '小类名称',
`insustry_type` tinyint(2) DEFAULT NULL COMMENT '行业所属产业分类(1:一产;2:二产;3:三产)',
`heavy_type` tinyint(2) DEFAULT NULL COMMENT '行业所属工业类型(1:轻工业、2:重工业)',
`extend_field1` varchar(32) DEFAULT NULL COMMENT '扩展字段1',
`extend_field2` varchar(255) DEFAULT NULL COMMENT '扩展字段2',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='国民经济行业分类表';
!!!获取方式!!!
关注我的VX公众号:靠谱杨的挨踢生活,回复【行业】即可
整理不易,资源fu费,谢谢支持!
- THE END -
最后修改:2023年3月13日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.reliableyang.cn/1036.html
共有 0 条评论