数据处理是 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 bytearray/bytes/string区别 - Python零基础入门教程

    目录 一.字节与字符的区别 1.字节概念 2.字符概念 3.字符串概念 4.字节串概念 二.str / bytes / bytearray 区别 三.string 与 bytes / bytearra ...

  2. python和c 的区别-Python与C语言有什么区别?

    答题练手.手机排版不佳请谅解~ 更新2:还是关于编译和解释 二者的本质区别是在编译/解释器的总体工作方式上的,编译器是off-line,解释器是on-line.编译器把整个程序读进来,进行一系列变大变 ...

  3. python和java的区别-Python和Java的区别有哪些?如何选择?

    原标题:Python和Java的区别有哪些?如何选择? 随着人工智能AI的发展越来越快速,很多人对于Python开发技术也是越来越重视,也正因如此,不少人拿着Java和Python进行比较,认为Pyt ...

  4. python和c 的区别-Python和c语言的主要区别在哪

    谈及编程语言,越来越多的不同类的语言出现,Python就是一种新流行的语言,Python和C语言都是一种可用于实现多线程的高级编程语言,两者有什么不同之处呢?下面由IT培训网教大家聊聊Python和C ...

  5. python和java的区别-python和java的区别,看了这个就会区分了!

    翻看日历,2019年结束也就剩下3个月的时间了!时光飞逝,伴随着互联网人工智能时代的发展,人类一直在预测,2020年什么技术会火?其中,人工智能编程成了大家讨论的热点,Python.Java一直被人们 ...

  6. python和java的区别-python与java区别

    Python和Java都是很火的编程语言,对于想学习编程的人员来说,常常被这个问题所困扰:我是该学Python还是Java呢?想要解决这个问题,还需结合自身实际情况和两种语言的特点进行分析. 以下是P ...

  7. python和c 的区别-Python与C语言的区别

    作为目前最火爆的语言之一,人工智能的兴起让Python一夜之间家喻户晓,几乎所有人对于Python的理解都是"简单""易学",甚至不少中小学也开始计划将Pyth ...

  8. python和java的区别-python 和 java 的区别

    区别 一.python虚拟机没有java强,java虚拟机是java的核心,python的核心是可以很方便地使用c语言函数或c++库. 二.python是全动态性的,可以在运行时自己修改自己的代码,j ...

  9. python和c 的区别-Python和C语言的区别是什么?Python和C语言的简单比较

    Python和C语言都是一种可用于实现多线程的高级编程语言,那么它们之间有什么区别?本篇文章就来简单比较一下Python和C语言,让大家了解Python和C语言之间的区别,希望对大家有所帮助. 什么是 ...

最新文章

  1. 适用于CUDA GPU的Numba例子
  2. pyinstaller 打包selenium脚本 取消cmd
  3. android 手动签名apk,记录手动签名APK的过程
  4. 在window10 WSL 中编译 OpenJDK13
  5. jzoj100044-abcd【多重背包,二进制压缩,dp】
  6. web前端开发论文写作_外语论文文献引言格式—MLA Style
  7. PHP header发送各种类型文件下载
  8. linux 下基本指令
  9. 20145209 《信息安全系统设计基础》第13周学习总结
  10. 毕设题目:Matlab验证码识别
  11. 香港最卖座的10部华语片:周星驰3部,成龙周润发各自2部
  12. Project(8)——收货地址——增加 --- 省市区数据处理
  13. 北京航空航天大学计算机科学与技术考研科目,2022北京航空航天大学计算机科学与技术考研备考指导-参考书、分数线...
  14. 2022年全球程序员薪资排行出炉:中国倒数第九,GO最赚钱
  15. Hibernate 的 HHH90000022 警告
  16. 第二人生的源码分析(十九)人物组合显示
  17. 计算机教室的英语单词怎么写的,小学的英语单词怎么写
  18. 文件和文件夹的操作——文件流的使用
  19. flink 1.14编译:flink-fs-hadoop-shaded找不到
  20. 企业级安全攻防三:身份认证,只有账号密码吗?

热门文章

  1. suse linux通过iso文件安装gcc
  2. [转]Python UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 的解决办法...
  3. puppet开源的软件自动化配置和部署工具——本质就是CS,服务端统一管理配置...
  4. 使用netty编写IM通信界面
  5. 30行代码消费腾讯人工智能开放平台提供的自然语言处理API
  6. 关于日志文件的一些处理
  7. Swift 本地推送通知UILocalNotification
  8. SetConsoleCtrlHandler 处理控制台消息
  9. 极客Web前端开发资源大荟萃#017
  10. 解决tomcat启动后访问页面中文乱码