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实现模拟按键,自动翻页看u17漫画
Mar 17 Python
初步介绍Python中的pydoc模块和distutils模块
Apr 13 Python
python实现SMTP邮件发送功能
Jun 16 Python
python简易远程控制单线程版
Jun 20 Python
python3 flask实现文件上传功能
Mar 20 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
python把1变成01的步骤总结
Feb 27 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
Python常遇到的错误和异常
Nov 02 Python
Python使用Web框架Flask开发项目
Jun 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
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
php解析json数据实例
2014/08/19 PHP
PHP实现合并discuz用户
2015/08/05 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
js判断游览器类型及版本号的代码
2014/05/11 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
js创建数组的简单方法
2016/07/27 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
python3生成随机数实例
2014/10/20 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Python中turtle作图示例
2017/11/15 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
python递归函数绘制分形树的方法
2018/06/22 Python
浅谈Python基础—判断和循环
2019/03/22 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
在校生钳工实习自我鉴定
2013/09/19 职场文书
重阳节登山活动方案
2014/02/03 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
初中军训感想
2015/08/07 职场文书
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技