数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件。因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道。

如果仅仅是要以表单形式保存数据,可以借助 CSV 格式(一种以逗号分隔的表格数据格式)进行处理,Excel 也支持此格式。但标准的 Excel 文件(xls/xlsx)具有较复杂的格式,并不方便像普通文本文件一样直接进行读写,需要借助第三方库来实现。

常用的库是 python-excel 系列:

xlrd、xlwt、xlutils

xlrd - 读取 Excel 文件

xlwt - 写入 Excel 文件

xlutils - 操作 Excel 文件的实用工具,如复制、分割、筛选等

尽管这是目前被用得最多的 Excel 库,我还是很想吐槽为什么这三个包不能放在一个模块里……另外它们有个缺陷,就是只能处理 xls 文件。如果你想用新版本的 xlsx,可以考虑 openpyxl 和 xlsxwriter。

不过今天只说说这三个。

安装

安装的方法没啥特别的,只是得装三遍。可以下载安装包、下载代码压缩包、或者通过 pip 等。

如果安装过之前推荐的 anaconda,那么就已经有了 xlrd 和 xlwt,但 xlutils 没有附带在安装包中,使用时仍需另行安装。

读取

结合一段简单的代码来看:

import xlrd

# 打开 xls 文件

book = xlrd.open_workbook("test.xls")

print "表单数量:", book.nsheets

print "表单名称:", book.sheet_names()

# 获取第1个表单

sh = book.sheet_by_index(0)

print u"表单 %s 共 %d 行 %d 列"% (sh.name, sh.nrows, sh.ncols)

print "第二行第三列:", sh.cell_value(1, 2)

# 遍历所有表单

forsinbook.sheets():

forrinrange(s.nrows):

# 输出指定行

print s.row(r)

测试文件:

输出结果:

表单数量: 2

表单名称: [u'Group.A', u'Group.B']

表单 Group.A 共 7 行 3 列

第二行第三列: 15.0

[text:u'Rank', text:u'Team', text:u'Points']

[number:1.0, text:u'Brazil', number:15.0]

[number:2.0, text:u'Russia', number:12.0]

...

常用的方法:

open_workbook 打开文件

sheet_by_index 获取某一个表单

sheets 获取所有表单

cell_value 获取指定单元格的数据

写入

还是看代码:

import xlwt

# 创建 xls 文件对象

wb = xlwt.Workbook()

# 新增一个表单

sh = wb.add_sheet('A Test Sheet')

# 按位置添加数据

sh.write(0, 0, 1234.56)

sh.write(1, 0, 8888)

sh.write(2, 0, 'hello')

sh.write(2, 1, 'world')

# 保存文件

wb.save('example.xls')

生成文件:

常用的方法:

Workbook 创建文件对象

add_sheet 新增一个表单

write 在指定单元格写入数据

修改

很遗憾,并没有直接修改 xls 文件的方法。通常的做法是,读取出文件,复制一份数据,对其进行修改,再保存。

在复制时,需要用到 xlutils 中的方法。

fromxlrd import open_workbook

fromxlutils.copy import copy

# 打开文件

rb = open_workbook("example.xls")

# 复制

wb = copy(rb)

# 选取表单

s = wb.get_sheet(0)

# 写入数据

s.write(0, 1, 'new data')

# 保存

wb.save('example.xls')

修改后文件:

特别要注意的是,选取读取表单时,要使用 sheet_by_index,而在选取写入表单时,则要用 get_sheet。不要问我为什么,我也很想知道这么设定的用意何在……

时间转换

如果表单中有时间格式的数据,通过处理之后,你会发现时间数据出了差错。

输出单元格内容:

[number:8888.0, xldate:42613.0]

因为这里 xldate 有自己的格式定义。如果要使用正确的格式,必须转换:

new_date = xlrd.xldate.xldate_as_datetime(date, book.datemode)

date 是对应单元格的数据,book 是打开的文件对象。

另外,在打开文件时,加上参数 formatting_info=True,可以保证在时间数据在 copy 时保持原样。

写入时间数据,则可通过此方法创建 excel 的时间对象:

xlrd.xldate.xldate_from_datetime_tuple

或者通过 xlwt.easyxf 指定时间格式:

style = xlwt.easyxf(num_format_str='D-MMM-YY')ws.write(1, 0, datetime.now(), style)

具体细节及更多功能这里不展开说明。

以上便是 Python 操作 Excel 文件的一些基本方法。实际使用过程中遇到问题或者需要了解更多功能,永远记住两个词:

RTFM、STFW

:)

【编辑推荐】

【责任编辑:未丽燕 TEL:(010)68476606】

点赞 0

python跟excel_Python与Excel 不得不说的事情相关推荐

  1. python和excell_Python与Excel 不得不说的事情

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 ...

  2. python与excel-Python与Excel 不得不说的事情

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 ...

  3. python与excel结合-Python与Excel 不得不说的事情

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 ...

  4. python和excel的区别-Python与Excel 不得不说的事情

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 ...

  5. python创建excel_python创建Excel文件数据的方法

    原博文 2018-12-07 18:41 − # -*- coding: utf-8 -*- # @Time : 2018/12/6 17:10 # @Author : suchao # @Disc: ...

  6. python与excel-Python 与 Excel 不得不说的事

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 常用的库是 python-excel 系 ...

  7. 怎么python编程excel_Python操作excel

    python 读写 excel 有好多选择,但是,方便操作的库不多,在我尝试了几个库之后,我觉得两个比较方便的库分别是 xlrd/xlwt.openpyxl. 之所以推荐两个库是因为这两个库分别操作的 ...

  8. python连接excel_Python操作Excel

    使用python来操作Excel需要用到xlrd和xlwt这两个库,作用是在python中读取和写入excel数据,使用前需要安装和import导入: 1.Python 读 excel数据 使用Pyt ...

  9. python画画excel_python在excel中画画

    原图 excel像素图 (虽然看起来很像是粘贴的图片,实际是一个单元格一个像素组成的.) 这段时间python学习进入瓶颈期,爬虫到scrapy框架,能安装上却不能运行,查了几天资料,经过多次尝试,好 ...

最新文章

  1. 在Digital Ocean上的MongoDB
  2. 【Android开发—智能家居系列】(四):UDP通信发送指令
  3. spwm逆变器双极性matlab教程,三相逆变器双极性SPWM调制技术的仿真(论文资料).doc...
  4. 创建android工程时Install Dependencies(安装依赖)提示
  5. ajax创建对象,ajax创建对象
  6. Linux shell脚本详解及实战(一)——shell简介、shell变量及脚本规范
  7. Machine Learning Concepts
  8. java数组的定义(菜鸟教程)
  9. 软件系统的测试计划,软件系统测试计划-模板
  10. 一套优秀的直播系统源码是什么样的?起码要有这五个模块
  11. 2265. 统计值等于子树平均值的节点数
  12. 手机忘记开机密码怎么办?我来教你
  13. Guava学习笔记(转)
  14. 如何写学术论文的rebuttal
  15. 对话机器人在瓜子的实践
  16. 游戏窗口化的逆向分析
  17. docker启动sqlserver_使用docker部署SqlServer
  18. 树莓派下载操作系统以及opencv下载
  19. 利用Python做新能源公司股票分析(可视化)
  20. 两步轻松解除盗版Windows XP盗版警告

热门文章

  1. C语言无符号整数和有符号整数的比较
  2. 2287: 【POJ Challenge】消失之物
  3. 移动web端的react.js组件化方案
  4. QTcpSocket 发送数据的几种方法
  5. Java程序练习-长整数加法运算
  6. activereport
  7. [转载] python3.6版本生成的python脚本如何打包为可独立执行的exe程序
  8. [转载] [556]python实现神经网络
  9. [转载] Python类属性、类方法和静态方法
  10. [转载] JAVA的throw用法及扩展