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对两个有序列表进行合并和排序的例子
Jun 13 Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
python实现读取并显示图片的两种方法
Jan 13 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
Python函数参数操作详解
Aug 03 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
Dec 12 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
Python re正则表达式元字符分组()用法分享
Feb 10 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 Python
python实现微信打飞机游戏
Mar 24 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
PHP里的$_GET数组介绍
2019/03/22 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
js切换光标示例代码
2013/10/10 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
理解Python中的With语句
2015/02/02 Python
python 2.7.14安装图文教程
2018/04/08 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
如何更优雅地写python代码
2019/07/02 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
python中的测试框架
2020/11/13 Python
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
数控专业推荐信范文
2013/12/02 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
商业房地产广告语
2014/03/13 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
运动会入场口号
2014/06/07 职场文书
孩子教育的心得体会
2014/09/01 职场文书
村干部任职承诺书
2015/01/21 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
OpenCV-Python实现油画效果的实例
2021/06/08 Python