「前置知识」xlutils搭桥xlrd和wt轻松实现Excel文件的读写

  前面内容,我们讲解了xlrd和xlwt模块读写Excel文件的一些常规操作。今天,我们来了解下两者如何结合使用。

  xlrd和xlwt两个模块,一个负责“读”,一个负责“写”。但两个模块操作的对象并不是一类。如下图:

  用xlrd模块打开一个Excel工作表后,返回一个xlrd.Book对象实例;用xlwt模块创建工作簿时,会返回一个xlwt.Workbook对象实例,两者其实是不同的对象。

  这样做的好处是:在处理Excel数据时,流程更加清晰。使用xlrd将Excel中的数据,转化为Python相关的数据结构(比如:列表……),并提取出来(xlrd提供了很多方法)。如果xlwt模块需要这些数据,则直接执行相应的写入操作即可(这里难免会用到一些循环遍历)。

  然而,缺点也是显而易见的,数据量大时,由于“读”、“写”操作的对象并不同,需要折中处理为Python对象,这是一个繁琐的转化过程,很浪费资源。

  有没有一个无缝的过度方式呢?就是直接将xlrd.Book对象转化为一个xlwt.Workbook对象,将xlrd读取到的Excel文件直接转化为可写的Workbook对象实例,这样,写入后直接保存即可完成整个读写操作。

  当然,设计者肯定考虑到了这种需求。github中很容易找到这个模块xlutils,它和xlrd、xlwt配套使用。

  xlutils模块相当于在xlrd和xlwt之间搭建了一座桥,最核心的作用是将xlrd的Book对象复制转换为xlwt 的Workbook对象,具体使用时,通常导入模块中的copy子模块中的copy函数来实现(有点绕口)。

  这样,问题就简单多了。操作过程不用再将xlrd.Book对象实例转化为Python的原生数据结构(如列表等),实现了无缝对接。为了能很好的理解这个处理流程,举个例子。

  我们手头有一份1999年-2019年全国各地区人口数据汇总表,显示在一张表格里面,如下图(文末附表格及源代码下载方式)。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注