python实现读取excel写入mysql的小工具详解

作者:zhoutk 时间:2024-01-17 21:50:33 

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)

来源:https://segmentfault.com/a/1190000012041140

标签:python,读取excel,mysql
0
投稿

猜你喜欢

  • Go中的应用配置管理详解

    2023-06-21 00:40:55
  • Python3+pycuda实现执行简单GPU计算任务

    2022-06-04 09:55:29
  • 详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程

    2021-08-11 14:08:22
  • Python测试Kafka集群(pykafka)实例

    2023-05-05 20:57:56
  • iframe全跨域高度自适应解决方案

    2008-12-21 16:16:00
  • Jquery多选下拉列表插件jquery multiselect功能介绍及使用

    2024-04-22 12:59:41
  • Django models文件模型变更错误解决

    2021-05-14 11:02:10
  • 当设计师遇上前端开发

    2009-05-04 14:05:00
  • Mysql的复合索引如何生效

    2024-01-26 06:53:17
  • SQL Server CROSS APPLY和OUTER APPLY的应用详解

    2024-01-21 02:27:21
  • PHP中大于2038年时间戳的问题处理方案

    2023-07-03 14:33:26
  • JetBrains(IEDA、CLion、Pycharm) 学生获得免费使用资格

    2022-02-21 09:25:35
  • 使用PHP Socket 编程模拟Http post和get请求

    2023-11-15 10:58:52
  • IE6,7下实现white-space:pre-wrap;

    2009-12-31 18:30:00
  • Python实现微信好友的数据分析

    2023-10-21 15:54:20
  • 一文带你熟悉Go语言中的分支结构

    2024-03-07 19:52:49
  • 解决python 无法加载downsample模型的问题

    2023-10-04 09:23:31
  • 使用Postman生成的okhttp代码依赖

    2023-06-12 22:34:12
  • 关于大型页游后端管理系统的一点经验和个人见解

    2023-05-02 06:21:16
  • Python数据库反向生成Model最优方案示例

    2023-11-02 18:37:36
  • asp之家 网络编程 m.aspxhome.com