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中os.path用法分析
Jan 15 Python
Python3实现从文件中读取指定行的方法
May 22 Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 Python
对python中执行DOS命令的3种方法总结
May 12 Python
python实现公司年会抽奖程序
Jan 22 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
Python实现http接口自动化测试的示例代码
Oct 09 Python
在Python中字典按值排序的实现方法
Nov 12 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
Python实现单例模式的5种方法
Jun 15 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截取中文字符串的问题
2006/07/12 PHP
对Session和Cookie的区分与解释
2007/03/16 PHP
PHP编实现程动态图像的创建代码
2008/09/28 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP闭包函数详解
2016/02/13 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
Python的设计模式编程入门指南
2015/04/02 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
python中的二维列表实例详解
2018/06/19 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
简单了解python中的与或非运算
2019/09/18 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
Django多数据库联用实现方法解析
2020/11/12 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
医学毕业生自我鉴定
2013/10/30 职场文书
公司委托书格式范文
2014/04/04 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
介绍信怎么写
2015/01/30 职场文书
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript