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将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
python异步存储数据详解
Mar 19 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 Python
python redis 批量设置过期key过程解析
Nov 26 Python
pytorch 常用线性函数详解
Jan 15 Python
Python JSON编解码方式原理详解
Jan 20 Python
Python 使用office365邮箱的示例
Oct 29 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
用ODBC的分页显示
2006/10/09 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
php实现网站留言板功能
2015/11/04 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
webpack4简单入门实例
2018/09/06 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
降低python版本的操作方法
2020/09/11 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
华为C++笔试题
2014/08/05 面试题
办公室岗位职责
2014/02/12 职场文书
抗震救灾标语
2014/06/26 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
人口与计划生育责任书
2015/05/09 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL