【Python3学习系列】——Python读取Excel

看完这篇教程,你会了解到Python3导入Excel2007及以上版本的基本步骤,了解相关连接数据库的基本步骤,了解cx_Oracle、pymssql openpyxl等包的使用,和其他关于Pyhton3基础知识tuple、生成器和占位符。

业务需求

现在有一份从数据库导出的excel文件,第一行对应的是表字段名称,然后数据量也不是很大,现在需要导入到数据库,当然SQLserver可以直接导入excel,然后其他的数据库不晓得可不可行,然后这次我们要实现的就是利用python实现读取excel,然后存入对应的数据库。

这块主要用到了一些python3的模块有:

  • 连接oracle的数据库,cx_Oracle 7.0;
  • 连接SQLserver的数据库,pymssql 2.1.4
  • 读取excel2007及以上版本,openpyxl 2.5.10

相关包介绍

1. cx_Oracle(官方文档:cx_Oracle)

首先,先看一份连接的事例代码

// 引入包
import cx_Oracle

//建立连接 
conn = cx_Oracle.connect('用户名/密码@服务器地址/服务器名')
//实例 'test111/test12345@127.0.0.1/orcl'

//获取游标
cursor = conn.cursor()

//执行sql语句
cursor.execute("select address from temp_m_customer_addr_info where ID = '103791721'")

//取一行数据,游标自动向下移动一行
row = cursor.fetchone()

//打印取出的这行数据
print(row)

//关闭游标和关闭连接
cursor.close()
conn.close()

然后,我们来简单介绍下它的一些 其他用法(主要是游标对象cursor的操作,因为它最常用)

  • Cursor.execute(statement, [parameters, ]**keywordParameters)

  • Cursor.executemany(statement, parameters, batcherrors=False, arraydmlrowcounts=False)

  • Cursor.fetchall()

  • Cursor.fetchmany([numRows=cursor.arraysize])

  • Cursor.rowcount

  • Cursor.rowfactory

2. pymssql (官方文档:pymssql)

同样我们也是先来看实例代码

// 引入包
import pymssql

//建立连接 
conn = pymssql.connect(host='地址', user='用户名', password='用户密码', database='数据库')
//实例 host='127.0.0.1', user='sa', password='sa12345', database='test'

//获取游标
cursor = conn.cursor()

//执行sql语句
cursor.execute("select address from temp_m_customer_addr_info where ID = '103791721'")

//取一行数据,游标自动向下移动一行
row = cursor.fetchone()

//打印取出的这行数据
print(row)

//关闭游标和关闭连接
cursor.close()
conn.close()

从上面看出来,使用的方法它们之间貌似遵循着某种规范,使用起来都是很相似的,在这就不赘述了,其实它们之间还是会有点小区别的,主要体现在数据类型上,两者都会返回一个tuple,其中对应的数据类型会因为数据不同而返回不同的数据类型对象,到时候对应处理数据的时候,格外留意处理下即可。

3. openpyxl(官方文档:openpyxl

还是照例上代码:

// 引入包
from openpyxl import load_workbook

// 根据地址,加载excel
wb = load_workbook(url)

// 获取对应的sheet
ws = wb['SC_MAGAZINE.SJ_DOCUMENT_17']

// 遍历ws里面 一行一行
for i, row in ws.rows:
    print(i)
    for cell in row:
      print(cell.value)

我们本次业务只用到取值,但是写入有时候也是会需要的,我们接着来简单了解下其他的方法等

  • ws1 = wb.active 取出一个sheet(激活)

  • ws1.append(range(600)) 添加数据

  • ws2 = wb.create_sheet(title="Pi") 创建 名字为pi的sheet

  • wb.save(filename = ‘filename’) 保存这个excel

  • ws.merge_cells('A2:D2') 合并单元格

  • ws.unmerge_cells('A2:D2') 取消合并

Python3基础知识

这次业务里面用到了一些知识主要有:tuple、生成器、占位符等,我们就来了解了解,这样子积累,应该会比你枯燥的去看比较有意思,但是最终还是需要系统的看。我们开始吧!

1. tuple 元祖(推荐廖雪峰老师的文档:list和tuple

有以下几个特点:

  • tuple一旦初始化就不能修改
  • 和list类似,表现为t = ('nihao',1,'小子’,[1,2,3],'ceshi'),用大括号括起来 ,而list使用中括号

tuple可以转化为list,使用list(tuple)就可以转为list,自然tuple(list)也可以将tuple转化为tuple

2. generator 生成器 (推荐廖雪峰老师的文档:generator)

在循环的过程中不断推算出后续,这种一边循环一边计算的机制,称为生成器:generator。

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

创建Lg的区别仅在于最外层的[]()L是一个list,而g是一个generator。

3. %s占位符

其实不止这一个占位符,还有%d%f等等,列个表看看

格式 描述
%% 百分号标记
%c 字符及其ASCII码
%s 字符串
%d 有符号整数(十进制)
%u 无符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%X 无符号整数(十六进制大写字符)
%e 浮点数字(科学计数法)
%E 浮点数字(科学计数法,用E代替e)
%f 浮点数字(用小数点符号)
%g 浮点数字(根据值的大小采用%e或%f)
%G 浮点数字(类似于%g)
%p 指针(用十六进制打印值的内存地址)
%n 存储输出字符的数量放进参数列表的下一个变量中

当然常用的还是%d%f%s

用法是print("My name is %s" %("Alfred.Xue")),这些用法在Python3基础里面应该是不会提到太多,多积累,然后记忆起来对你编程速度会有很大提升。其中 %s 还会自动帮你去判断类型然后放入到占位符位置。

业务实现

业务实现主要就是结合上述的一些技术,然后进行for循环遍历来组合数据,写入数据库,没有特别的难点,此处就不在介绍,后续如果有类似的工作内容,在详细展示!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • python学习笔记 声明:学习笔记主要是根据廖雪峰官方网站python学习学习的,另外根据自己平时的积累进行修正...
    renyangfar阅读 3,016评论 0 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,590评论 18 139
  • 太在乎“身外之物”,容易掉入贪欲的陷阱,无法自拔; 不在乎“身外之物”,容易穷困潦倒一生,被势利之眼看...
    烽火煤阅读 170评论 0 0
  • 之一你飘扬的长发就是我生命不屈的旗帜 在沸腾不息的风中你飘飞的长发就是我生命不屈的旗帜在天空高高地飘扬我真诚的呼唤...
    闲不语阅读 464评论 1 5
  • 晓景天涯爽, 晨曦雅兴多。 鸟鸣惊枕梦, 叶落咏飞歌。 古木闻风早, 池花润镜波。 楼观湾海里, 双鹭眼前过。
    郭大牛阅读 555评论 4 23