Python与Excel 不得不说的事情

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

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

Python与Excel 不得不说的事情

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

Python与Excel 不得不说的事情

常用的库是 python-excel 系列:

  • xlrd、xlwt、xlutils
  • xlrd - 读取 Excel 文件
  • xlwt - 写入 Excel 文件
  • xlutils - 操作 Excel 文件的实用工具,如复制、分割、筛选等

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

Python与Excel 不得不说的事情

不过今天只说说这三个。

安装

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

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

读取

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

  1. import xlrd 
  2. # 打开 xls 文件 
  3. book = xlrd.open_workbook("test.xls"
  4. print "表单数量:", book.nsheets 
  5. print "表单名称:", book.sheet_names() 
  6. # 获取第1个表单 
  7. sh = book.sheet_by_index(0) 
  8. print u"表单 %s 共 %d 行 %d 列" % (sh.name, sh.nrows, sh.ncols) 
  9. print "第二行第三列:", sh.cell_value(1, 2) 
  10. # 遍历所有表单 
  11. for s in book.sheets(): 
  12.     for r in range(s.nrows): 
  13.         # 输出指定行 
  14.         print s.row(r) 

测试文件: 

Python与Excel 不得不说的事情

输出结果: 

  1. 表单数量: 2  
  2. 表单名称: [u'Group.A', u'Group.B' 
  3. 表单 Group.A 共 7 行 3 列  
  4. 第二行第三列: 15.0  
  5. [text:u'Rank', text:u'Team', text:u'Points' 
  6. [number:1.0, text:u'Brazil', number:15.0]  
  7. [number:2.0, text:u'Russia', number:12.0]  
  8. ... 

常用的方法:

  • open_workbook 打开文件
  • sheet_by_index 获取某一个表单
  • sheets 获取所有表单
  • cell_value 获取指定单元格的数据

写入

还是看代码:

  1. import xlwt 
  2. # 创建 xls 文件对象 
  3. wb = xlwt.Workbook() 
  4. # 新增一个表单 
  5. sh = wb.add_sheet('A Test Sheet'
  6. # 按位置添加数据 
  7. sh.write(0, 0, 1234.56) 
  8. sh.write(1, 0, 8888) 
  9. sh.write(2, 0, 'hello'
  10. sh.write(2, 1, 'world'
  11. # 保存文件 
  12. wb.save('example.xls'

生成文件: 

Python与Excel 不得不说的事情

常用的方法:

  • Workbook 创建文件对象
  • add_sheet 新增一个表单
  • write 在指定单元格写入数据

修改

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

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

  1. from xlrd import open_workbook 
  2. from xlutils.copy import copy 
  3. # 打开文件 
  4. rb = open_workbook("example.xls"
  5. # 复制 
  6. wb = copy(rb) 
  7. # 选取表单 
  8. s = wb.get_sheet(0) 
  9. # 写入数据 
  10. s.write(0, 1, 'new data'
  11. # 保存 
  12. wb.save('example.xls'

修改后文件: 

Python与Excel 不得不说的事情

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

时间转换

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

Python与Excel 不得不说的事情
Python与Excel 不得不说的事情

输出单元格内容:

  1. [number:8888.0, xldate:42613.0] 

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

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

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

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

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

  1. xlrd.xldate.xldate_from_datetime_tuple 

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

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

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

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

  • RTFM、STFW
  • :)

 

 

责任编辑:未丽燕 来源: 知乎专栏
相关推荐

2020-06-15 08:19:00

ZooKeeperEureka

2015-08-31 14:12:12

DockerKubernetesPaaS

2019-11-14 15:38:46

AndroidRelease项目

2019-10-18 17:55:03

安全运营

2019-10-21 10:18:29

区块链大数据

2010-08-27 10:37:43

无线标准WAPI

2011-04-26 09:44:05

Power Cloud

2018-08-06 11:59:00

混合云数据中心上云

2010-05-26 15:17:06

Windows Emb

2018-07-20 22:22:21

红帽混合云API

2010-01-07 09:17:57

HTML 5

2009-11-03 17:43:19

Oracle用户授权

2015-01-16 16:44:50

2014-10-21 11:05:52

英特尔Linux

2014-04-15 10:18:24

中文女工科男

2018-08-20 13:39:15

小程序设计UI设计师

2012-10-31 10:07:00

JS前端Web

2012-10-31 10:36:17

js前端JavaScript页面构建

2011-04-27 10:31:29

兼容墨盒用户体验

2009-05-20 13:03:40

Visual StudSilverlight微软
点赞
收藏

51CTO技术栈公众号