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复制与引用用法分析
Apr 08 Python
Python爬虫利用cookie实现模拟登陆实例详解
Jan 12 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
Django 反向生成url实例详解
Jul 30 Python
python自动化工具之pywinauto实例详解
Aug 26 Python
pytorch之Resize()函数具体使用详解
Feb 27 Python
python变量的作用域是什么
May 26 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 Python
Python如何读写字节数据
Aug 05 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 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
网站当前的在线人数
2006/10/09 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
Python设计模式之工厂模式简单示例
2018/01/09 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
次世代生活态度:Hypebeast
2018/07/05 全球购物
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
个人债务授权委托书
2014/10/17 职场文书
2014年学习部工作总结
2014/11/12 职场文书
办公室管理规章制度
2015/08/04 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记