xlrd和xlwt操作Excel的关系用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配套使用。
github截图感兴趣的小伙伴可以尝试读下源代码^-^
【xlutils作用】
xlutils模块相当于在xlrd和xlwt之间搭建了一座桥,最核心的作用是将xlrd的Book对象复制转换为xlwt 的Workbook对象,具体使用时,通常导入模块中的copy子模块中的copy函数来实现(有点绕口)。
当然,它还包含了一些其他的方法,感兴趣的小伙伴自己研究下。
【使用过程】
我们来看下如何使用这个模块?
完成对象转化这样,问题就简单多了。操作过程不用再将xlrd.Book对象实例转化为Python的原生数据结构(如列表等),实现了无缝对接。为了能很好的理解这个处理流程,举个例子。
例子
我们手头有一份1999年-2019年全国各地区人口数据汇总表,显示在一张表格里面,如下图(文末附表格及源代码下载方式)。
1999年至2019年各地人口数据需求是
购买专栏解锁剩余63%