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 Web框架Pylons中使用MongoDB的例子
Dec 03 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
讲解Python中的标识运算符
May 14 Python
Python制作豆瓣图片的爬虫
Dec 28 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
django admin后台添加导出excel功能示例代码
May 15 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
使用Pycharm分段执行代码
Apr 15 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
Python开发入门——迭代的基本使用
Sep 03 Python
Django vue前后端分离整合过程解析
Nov 20 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
linux下 C语言对 php 扩展
2008/12/14 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
Sea.JS知识总结
2016/05/05 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
Python Mysql自动备份脚本
2008/07/14 Python
python实现的系统实用log类实例
2015/06/30 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
django2.0扩展用户字段示例
2019/02/13 Python
pytorch的batch normalize使用详解
2020/01/15 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
应征英语教师求职信
2013/11/27 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
2014教师年度工作总结
2014/11/10 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
司机岗位职责范本
2015/04/10 职场文书
秋收起义观后感
2015/06/11 职场文书
居住证明范文
2015/06/17 职场文书
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python