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 相关文章推荐
在ironpython中利用装饰器执行SQL操作的例子
May 02 Python
python实现中文分词FMM算法实例
Jul 10 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
用Python将Excel数据导入到SQL Server的例子
Aug 24 Python
Python Gluon参数和模块命名操作教程
Dec 18 Python
Pytorch之contiguous的用法
Dec 31 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
Python Websocket服务端通信的使用示例
Feb 25 Python
通过实例解析Python RPC实现原理及方法
Jul 07 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
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
gearman的安装启动及python API使用实例
2014/07/08 Python
Python实现的多线程端口扫描工具分享
2015/01/21 Python
python使用urlparse分析网址中域名的方法
2015/04/15 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
Python玩转Excel的读写改实例
2019/02/22 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
python实现在一个画布上画多个子图
2020/01/19 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
标准自荐信范文
2014/01/29 职场文书
安全检查管理制度
2014/02/02 职场文书
捐款倡议书
2014/04/14 职场文书
消防安全宣传标语
2014/06/07 职场文书
借名购房协议书范本
2014/10/06 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python