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之有点简约的元组
Sep 24 Python
Python中的sort()方法使用基础教程
Jan 08 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
Python 新建文件夹与复制文件夹内所有内容的方法
Oct 27 Python
Python多线程同步---文件读写控制方法
Feb 12 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
django settings.py 配置文件及介绍
Jul 15 Python
python线程中的同步问题及解决方法
Aug 29 Python
python中with语句结合上下文管理器操作详解
Dec 19 Python
Python插件机制实现详解
May 04 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
Jul 21 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在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
基于python实现地址和经纬度转换
2020/05/19 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
党章学习思想汇报
2014/01/14 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
工作检讨书500字
2014/10/19 职场文书
运动会加油稿20字
2014/11/15 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
Java实现给Word文件添加文字水印
2022/02/15 Java/Android
python中数组和列表的简单实例
2022/03/25 Python
Oracle使用别名的好处
2022/04/19 Oracle