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脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
Python学习思维导图(必看篇)
Jun 26 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
浅谈python3中input输入的使用
Aug 02 Python
python语言的优势是什么
Jun 17 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
Apr 14 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图片验证码制作实现分享(全)
2012/05/10 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
php文件上传的两种实现方法
2016/04/04 PHP
PHP自定义错误用法示例
2016/09/28 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
jQuery插件开发全解析
2012/10/10 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
应届生财务管理求职信
2013/11/06 职场文书
大一军训感言
2014/01/09 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
微电影大赛策划方案
2014/06/05 职场文书
护士医德医风自我评价
2014/09/15 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
党员检讨书范文
2014/12/27 职场文书
学习党章心得体会2016
2016/01/15 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android