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 25 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
书单|人生苦短,你还不用python!
Dec 29 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
python super函数使用方法详解
Feb 14 Python
Python如何读写字节数据
Aug 05 Python
Python数据分析之pandas函数详解
Apr 21 Python
解决pytorch-gpu 安装失败的记录
May 24 Python
关于Python使用turtle库画任意图的问题
Apr 01 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
将数组写入txt文件 var_export
2009/04/21 PHP
php foreach、while性能比较
2009/10/15 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
基于php实现的验证码小程序
2016/12/13 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
jquery异步跨域访问代码
2013/06/28 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
jqTransform美化表单
2015/10/10 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
市场营销专科应届生求职信
2013/11/24 职场文书
汽车技术服务英文求职信范文
2014/01/02 职场文书
委托书范文
2014/04/02 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
人民检察院起诉书
2015/05/20 职场文书
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL