python实现读取excel写入mysql的小工具详解


Posted in Python onNovember 20, 2017

Python是数据分析的强大利器

利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理。
这里向大家分享python如何读取excel,并使用Python将数据存入Mysql中,有需要的朋友们一起来看看吧。

背景

需要导入全国高校名录到数据库,从教委网站下到了最新的数据,是excel格式,需要做一个工具进行导入,想试用一下python,说干就干。


  • xlrd : excel读写库
  • pymysql : mysql数据库驱动库,纯python打造
  • re : 正则表达式库,核心库

前两个用pip轻松完成安装,本人是在mac pro是进行的,过程很顺利,以前在mac上装mysqlclient一直安装不上,所以一度放弃使用python,但我在linux下安装mysqlclient却没有任何问题。

源代码

很简单的小脚本,留存纪念。值得注意的一点,数据库连接字段串中要设定字符编码,不然默认是lanti-1,写入会出错。

import xlrd
import pymysql
import re

conn = pymysql.connect(host='database connect address', port=1234, user='root',
      passwd='****', db='database name', charset='utf8mb4')
p = re.compile(r'\s')
data = xlrd.open_workbook('./W020170616379651135432.xls')
table = data.sheets()[0]
t = table.col_values(1)
nrows = table.nrows
for i in range(nrows):
 r1 = table.row_values(i)
 if len(r1[2]) == 10:
  cur = conn.cursor()
  cur.execute('insert into `university` (`id`, `name`, `ministry`, `city`, `level`, `memo`) \
     values (%s, %s, %s, %s, %s, %s)',
     (r1[2], p.sub('', r1[1]), p.sub('', r1[3]), p.sub('', r1[4]), r1[5], r1[6]))
  conn.commit()
  cur.close()

conn.close()

心得

写惯了类C的语言,不太习惯python,想同时掌握两种风格的编程语言,好痛苦啊。python编程效率的确不错,这是我第一次用python写实用小程序,连查带写带调试,一共也就花了一个来小时。python库与资料丰富,不愁找不到合适的^_^

数据库写入优化

早上闲来无事,用批量写入优化了一下,任务秒完成,比一条条写入快了很多, 比我预想的差别还要大。看来,没有不好的工具,只是我们没有用好啊!

import xlrd
import pymysql
import re

conn = pymysql.connect(host='database connect address', port=1234, user='root',
      passwd='****', db='database name', charset='utf8mb4')
p = re.compile(r'\s')
data = xlrd.open_workbook('./W020170616379651135432.xls')
table = data.sheets()[0]
t = table.col_values(1)
nrows = table.nrows
ops = []
for i in range(nrows):
 r1 = table.row_values(i)
 if len(r1[2]) == 10:
  ops.append((r1[2], p.sub('', r1[1]), p.sub('', r1[3]), p.sub('', r1[4]), r1[5], r1[6]))

cur = conn.cursor()
cur.executemany('insert into `university_copy` (`id`, `name`, `ministry`, `city`, `level`, `memo`) \
     values (%s, %s, %s, %s, %s, %s)', ops)
conn.commit()
cur.close()

conn.close()

python读取excel文件遇到的问题

1、mac安装xlrd模块,如果cmd下执行pip install xlrd安装不成功,可以直接去官网下载,名称类似这样的文件xlrd-1.0.0-py3-none-any.whl,切换到已下载的文件路径在cmd下执行pip3 install xlrd-1.0.0-py3-none-any.whl即可
http://pypi.python.org/pypi/xlrd

2、python打开excel报xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'username'

可以确认下要打开的excel保存时是不是本身就存在兼容性等格式提示,如果有的话,需要重新建一个不存在格式问题的文件

import xlrd
from os.path import join,abspath,dirname

fname = join(dirname(dirname(abspath(__file__))),'test1.xls')
bk = xlrd.open_workbook(fname, encoding_override="utf-8")
shxrange = range(bk.nsheets)
try:
sh = bk.sheet_by_name("工作表1")
# 获取行数
nrows = sh.nrows
# 获取列数
ncols = sh.ncols
print("nrows %d, ncols %d" % (nrows, ncols))
# 获取第一行第一列数据
cell_value = sh.cell_value(1, 1)
# print cell_value

row_list = []
# 获取各行数据
for i in range(0, nrows):
row_data = sh.row_values(i)
row_list.append(row_data)
except:
print("no sheet in %s named Sheet1" % fname)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python根据出生年份简单计算生肖的方法
Mar 27 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
pandas表连接 索引上的合并方法
Jun 08 Python
Python 查看list中是否含有某元素的方法
Jun 27 Python
python实现linux下抓包并存库功能
Jul 18 Python
python实现排序算法解析
Sep 08 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
django query模块
Apr 20 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
python 爬取豆瓣网页的示例
Apr 13 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 #Python
python Matplotlib画图之调整字体大小的示例
Nov 20 #Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 #Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 #Python
python中urlparse模块介绍与使用示例
Nov 19 #Python
Python Flask-web表单使用详解
Nov 18 #Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 #Python
You might like
php+ajax实现的点击浏览量加1
2015/04/16 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
python创建和删除目录的方法
2015/04/29 Python
Python基于Tkinter实现的记事本实例
2015/06/17 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
Python实现的rsa加密算法详解
2018/01/24 Python
浅析Python函数式编程
2018/10/06 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
个人应聘自我评价分享
2013/11/18 职场文书
家长会标语
2014/06/24 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
贷款担保书范本
2015/09/22 职场文书
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis