使用xlrd/xlwt,openpyxl库处理Excel的例子

python之xlwt、xlrd和openpyxl 实现对excel文件的读写功能 1.xlwt:对xls等excel文件的写入 2.xlrd:对xls等excel文件的读取 3.openpyxl:对xlsm、xlsx等excel文件的读写 一、读excel表(xlrd) 读excel要用到xlrd模块,官网安装(http://pypi.python.org/pypi/xlrd)。然后就可以跟着里面的例子稍微试一下就知道怎么用了。大概的流... 阅读详情

  前面介绍了Python中xlrd/xlwt及openpyxl的基本操作方法,并给出了简单的示例,但由于编程相对office面板操作不够直观,比较耗时,因此更多用于处理大量重复操作或较大的文件,这里分享一下最近小项目用到的实例。前三个用到了xlrd与xlwt,主要是从大量相同格式的Excel中取出值,并按时间构成序列,最后一个是将较大文件的横向区域纵向拼接起来,用到了xlrd和openpyxl。

例1.相同格式文件的固定位置的读取

  这是统计建模数据预处理的操作,国家邮政局会按月发布上个月全国快递投递量数据,在对这些数据进行分析之前必须将每个月的值提取出来按时序排列,操作很简单,但由于数据存在于每个月的Excel中,想得出2011年至2016年的序列就必须从72个表格中一一找出,手动处理太繁琐,因此可以使用程序处理。原始数据文件存储及格式如下:

这里写图片描述
图1.文件存储及命名方式

每个月的表格内容格式相同,以2015年8月月份Excel为例,其内容如下:

这里写图片描述
图2.每月数据文件格式及内容

我们需要提取的数据位于C8即第8行第3列,最终预期结果为:

这里写图片描述
图3.提取后的序列

实现代码为:

#从原始数据中选取 2011至2016年每月投递量数据并导出至result
#运行环境 python3.5.6

import xlrd
import xlwt

outfile = xlwt.Workbook()
sheet = outfile.add_sheet('num_post')

sheet.write(0,0,'投递量')
sheet.write(1,0,'日期')

col = 1
for year in range(2011,2017):    #选择年份范围 
    for mon in range(12):        #选择每年月份范围 
        data = xlrd.open_workbook('快递投递原始数据/%s/%sM%s.xlsx'%(year,year,mon+1))   #根据名称特点读取不同文件夹及文件
        table = data.sheets()[0]   #投递量数据位于每份 excel 的第一个 sheet 
        sheet.write(0,col,table.cell(7,2).value)       #将数据写入新文件
        sheet.write(1,col,str(year)+'/'+str(mon+1))    #写入日期
        col += 1

outfile.save('result.xls')       #保存文件

可以发现通过上述很简单的代码即可完成这一过程。

例2.相同格式文件的查找读取

  例1中每次都是读表格的C8位置,比较容易,除了固定位置,又是也需要查找之后读取,如从每月数据中读出延误、丢失、损毁、服务态度的申诉数据,因为这几项在每月表格中只位于同一列,而行位置不固定,而且服务包括投递与收寄两项,因此需要查找、判断合并后读取,其原数据格式如下:

这里写图片描述
图4.申诉数据表格格式

最终结果为:

这里写图片描述
图5.数据合并的序列结果

代码如下:

#用于从原始数据集中选取 2013 至 2016 年每月的申诉量 
#运行环境为 python3.5.6 

import xlrd
import xlwt

outfile = xlwt.Workbook()
sheet = outfile.add_sheet('result')

object = ['服务','延迟','丢失','损毁','日期']
for i in range(4):
    sheet.write(i,0,object[i])

col = 1
for year in range(2013,2017):        #选择年份范围 
    for mon in range(12):            #选择每年月份范围 
        data = xlrd.open_workbook('快递申诉原始数据/%s/%sM%s.xlsx'%(year,year,mon+1))
        table = data.sheets()[1]     #投递量数据位于每份 excel 的第二个sheet 
        s = 0                        #存在多项关于服务的申诉,因此需要遍历搜索
        for i in range(table.nrows):     #搜索各项申诉并存储 
            if '服务' in table.cell(i,1).value:
                s += table.cell(i,2).value      #服务申诉量累加
            if '延误' in table.cell(i,1).value:
                sheet.write(1,col,table.cell(i,2).value)
            if '丢失' in table.cell(i,1).value:
                sheet.write(2,col,table.cell(i,2).value)
            if '损毁' in table.cell(i,1).value:
                sheet.write(3,col,table.cell(i,2).value)
        sheet.write(0,col,s)                    #写入服务申诉
        sheet.write(4,col,str(year)+'/'+str(mon+1))
        col += 1

outfile.save('result2.xls')
例3.一个综合的例子

除了总量数据,网站还给出了部分快递企业的月份申诉数据,包括延误、丢失损毁、服务等,如下图所示:

这里写图片描述
图6.企业数据格式

分别将各企业各项申诉数据提取出来,并按时序排列,得到如下结果:

这里写图片描述
图7.企业数据提取后的结果

代码如下:

#用于从原始数据集中选取 2013 至 2017 年十家企业每月申诉率数据 
#运行环境为 python3.5.6 

import xlrd
import xlwt

outfile = xlwt.Workbook()
sheet = outfile.add_sheet('result',cell_overwrite_ok = True)

datalist = [['EMS',['EMS','邮政快递']],['SF',['顺丰']],['STO',['申通']],['YT',['圆通']],['ZT',['中通']],['YD',['韵达']],['QF',['全峰']],['JD',['京东']],['TT',['天天']],['HT',['汇通','百世']]]
#列表中每个元素表示一家企业,子列表首位表示公司简称,第二位为检索关键词列表

#写入表头
for i in range(len(datalist)):
    sheet.write_merge(3*i,3*i+2,0,0,datalist[i][0])
    sheet.write(3*i,1,'延误')
    sheet.write(3*i+1,1,'丢失')
    sheet.write(3*i+2,1,'服务')
sheet.write_merge(3*len(datalist),3*len(datalist),0,1,'日期')

#写入数据
col = 2
for year in range(2013,2017):
    for mon in range(12):
        data = xlrd.open_workbook('快递申诉原始数据/%s/%sm%s.xlsx'%(year,year,mon+1))
        table = data.sheets()[2]

        for nrows in range(table.nrows):
            for i in range(len(datalist)):
                for key in datalist[i][1]:
                    if key in table.cell(nrows,0).value:    #当关键字匹配时,写入数据
                        sheet.write(3*i,col,table.cell(nrows,2).value)
                        sheet.write(3*i+1,col,table.cell(nrows,3).value)
                        sheet.write(3*i+2,col,table.cell(nrows,4).value)
        sheet.write(3*len(datalist),col,str(year)+'/'+str(mon+1))
        col += 1

outfile.save('result3.xls')

例4.大文件的合并操作

  这个例子中需要将同一个sheet中原本横向排列的不同企业股票数据纵向拼接到一起,由于有数百家企业信息,每个企业有上千条记录,使用xlwt会因为超行而无法处理,需要用到openpyxl,考虑到xlrd在读取大文件时效率要高于openpyxl,因此仍使用xlrd读取,操作前后表格如下图所示:

这里写图片描述
图8.合并前数据格式(其中每个纵向区域表示不同企业)

这里写图片描述
图9.合并后数据格式(共137732条记录)

代码如下:

# Excel set合并
# python3.5.6
import xlrd
import openpyxl
def Set_Ask(file,data): 
    table = data.sheets()[6]
    nrows = table.nrows
    sheet1 = file.active

    # 写入表头
    row0 = ['CUSIP','BarTp','Date','OPEN','HIGH','LOW','LAST_PRICE','NUMBER_TICKS','VOLUME','VALUE']
    for i in range(len(row0)):
        sheet1.cell(row=1,column=i+1).value = row0[i]

    # 写入数据
    for m in range(1,9):
        i = m-1
        j = 2
        try:
            while(table.cell(4,i).value != '' or table.cell(4,i+9).value != '' or table.cell(4,i+18).value != ''):
                while(table.cell(4,i).value == ''):
                    i += 9
                for k in range(3,nrows):
                    if(table.cell(k,i).value != ''):
                        sheet1.cell(row=j,column=m+2).value = table.cell(k,i).value
                        sheet1.cell(row=j,column=1).value = table.cell(0,i-m+1).value[0:8]
                        sheet1.cell(row=j,column=2).value = table.cell(1,i-m+1).value[-1]
                        j += 1
                i += 9          #每个企业数据占8列
        except IndexError:
            continue

def main():
    file = openpyxl.Workbook()
    rdpath = 'data.xlsx'        #文件读取路径
    wtpath = 'new_data.xlsx'    #文件写出路径
    data = xlrd.open_workbook(rdpath)
    Set_Ask(file,data)      
    file.save(wtpath)       #文件保存

main()

从这些例子可以看出,使用python处理较多重复操作的excel以及较大文件相对于手工操作有很大优势。

Python处理Excel数据的方法 当Excel中有大量需要进行处理的数据时,使用Python不失为一种便捷易学的方法。接下来,本文将详细介绍多种Python方法来处理Excel数据。 阅读详情

相关推荐

【Python入门教程】Python常用表格函数&操作(xlrd、xlwt、openpyxl、xlwings)

在我们使用Python时,避免不了与Excel打交道。同样Python的三方库和代码的简洁性也为我们处理大数据提供了便利。今天给大家介绍一下常用的处理表格的函数,同时还有一些常用的操作。

Remote Sensing迷途小书童 8987

格式刷的功能是什么_Excel技巧—开始菜单之格式刷六大功能

点赞再看,养成习惯千里之行,始于足下今天我们主要学习的是"第一区块-剪贴板"中的"格式刷"。"格式刷"主要将一个对象的颜色、字体样式、字体大小、边框样式等所有格式复制到目标对象上,我们可以把它理解为格式的复制粘贴。说到"格式刷"我想大家脑海中应该立马浮现一把小刷子,点击一下就可以把格式复制到目标位置了。但是我们也知道每次点击格式刷只能用一次,那么如果想用很多次呢?今天我们就来说说"格式刷",里面一...

weixin_39857876的博客 3560

python写excel文件,openpyxl, xlrd, xlwt,xlutils

在上一篇写了python利用csv模块写csv文件,http://blog.youkuaiyun.com/xiaobing_blog/article/details/14056473,速度很快 但有些缺陷,所以我最后又找了写excel的工具 工具有这些:            在网站:http://www.python-excel.org/, 提供了xlrd,xlwt,xlutils一套工具,xlrd是

xiaobing的专栏 1万+

用openpyxl库批量修改excel格式小工具

【代码】用openpyxl库批量修改excel格式小工具。

yilan9876的博客 1050

【python】使用xlwt、xlrd、xlutils、openpyxl操作excel

模块介绍 xlwt、xlrd、xlutils可以完成读excel的读、写和修改操作,只需要通过pip安装相应的模块即可。 使用xlrd模块读excel 使用例子 import xlrd # 常规读取 filename = "test.xls" #文件路径 wb = xlrd.open_workbook(filename) # 加载这个xls文件 sh = wb.s...

Ezrealmore 1215

Python 读写Excel常用库对比(openpyxl、xlrd+xlwt、xlsxwriter、win32com、xlwings、pandas、DataNitro)

库 功能描述 优缺点 官方文档 openpyxl 读写Excel 的xlsx/xlsm/xltm/xltx文件 简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等功能应有尽有;缺点是对VBA的支持不够好,读取文件效率较其他库低。 https://openpyxl.readthedocs.io/en/stable/# xlutils xlrd/xlwt 老牌Python包 xlrd:读xls/xlsx ...

FloraLan666的博客 5132

openpyxl format cells 格式化单元格

日常 triage API automation 时,都手动把 failed 的 feature 汇总到excel里,还要手动格式化整得漂亮点出报告,每天如此,是花了不少时间的,总想着把一切手动的工作量都自动化了,一劳永逸。关于自动化定制 report,将分 2 篇介绍,这篇主要来说说 openpyxl 格式化问题,最常用的就是设置单元格的字体,边框,hyperlink,对齐,自适应宽度等,更多细节可以参考 openpyxl...

wumingxiaoyao的博客 3250

xlrd+xlwt+xlutils 知识全面汇总——Python的Excel读写处理

xlrd 是python中用于读取 xls 和 xlsx 格式Excel文件的库(较新的版本将不再支持xlsx格式的读取)。 xlwt 是python中用于将数据写入 xls 格式Excel文件的库。 以上二者均无法直接修改excel文件,xlutils库可提供辅助和衔接,使用户可以同时读写一个 .xls 文件。

weixin_45813276的博客 1992

python 使用[pyopenxl]操作excel 批量修改单元格样式:边框、字体、对齐、列宽

文章目录前言一、用openpyxl创建工作表二、批量修改单元格样式1、代码2.效果三、保存完工 前言 提示:在python的诸多模块中,openpyxl使用最广也最方便,本文就openpyxl批量设置单元格格式,如字体、对齐、边框等略作记录与介绍,也是本人在做项目的过程中遇到的并解决的问题。 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 一、用openpyxl创建工作表 from openpyxl import Workbook

在红尘中争渡 7035

Excel 自动化处理(1):Excel-xlrd/xlwt库打开excel中出现的错误和容易解决的BUG

本文介绍了Python处理Excel的两个经典库xlrd和xlwt。xlrd用于读取Excel文件(支持.xls和有限支持.xlsx),主要功能包括获取单元格数据、工作表信息和处理合并单元格;xlwt用于创建.xls文件,支持数据写入和样式设置。文章提供了两个库的安装方法和基础使用示例,并指出了各自的局限性(如格式支持有限、性能问题等),同时推荐openpyxl和pandas作为更现代的替代方案。最后针对常见错误(模块未安装、文件路径错误)给出了解决方案,强调使用绝对路径读取文件时需要注意斜杠方向。

此星光明博客 1114

n8n智能体开发:TheHive 5 节点

使用 TheHive 5 节点可以在 TheHive 中实现工作自动化,并将 TheHive 与其他应用程序集成。n8n 内置支持广泛的 TheHive 功能,包括创建警报、统计任务日志、案例和可观察项等。

王国平的博客 526

Python3操作Excel常用库整理(xlrd/xlwt,openpyxl,xlwings和xlsxwriter)

前面的文章《Python Pandas库批量处理Excel数据》简单介绍了利用Python的pandas库对大量的Excel文件进行合并,数据清洗等操作;pandas非常适合对大数据量的数据进行清洗和合并。但是在实际的工作中,除了像前文介绍那样对数据进行合并清洗外,还涉及其他的Excel表格数据的处理,这些数据的处理相对来说比较繁琐。 我们GIS行业涉及非常多的外业数据调查相关的工作,这些类似的项目都是需要根据外业调查获取到的信息填写到内业的表格中。根据外业调查表,按照一定规则更新对应的内业表信息,逻辑非

grfstc的博客 1万+

用Python为csv文件刷上excel格式、并备注特定行(pandas和openpyxl库)

背景  已知: 1、有多个城市的csv文件存放在下图文件夹中 2、有带格式的excel文件模板template一份   ​​​​​​​ 3、csv文件内容如下图左,模板文件见右   目标  1、将上图左csv文件,刷上上图右excel格式 2、将变化率大于30%的数据在excel原因列(上图右黄表头列)的对应行备注说明 解决思路 ​​​​​​​1、重命名复制excel模板 2、读取csv目标内容部分 3、写入excel 4、判断目标列值,特定行写入备注 实现代码 #给CSV文件刷上excel格式 #import chardet import os,shutil import openpy

xlrd/xlwt与openpyxl的读写效率比较

xlrd/xlwt与openpyxl都是python中处理Excel的库,功能基本一致,本文对两者在读取及写入大文件时的效率进行了对比,发现xlrd/xlwt在读写方面均优于openpyxl。

Vincevt_Wu的博客 2万+

【NAS for PVE _04】安装TrueNAS

前篇说到如何调试 Proxmox VE 8.2 为安装虚拟机做准备,本篇主要讲述如何在 Proxmox VE 上安装 TrueNAS 系统,并开启NFS供其他系统挂载使用官网下载好TrueNAS系统镜像。

村口王师傅。 6144

晶圆测试(Wafer Sort)的核心技术与良率提升策略

晶圆测试(Wafer Sort)是芯片制造中的关键“入学考试”,通过探针台与自动测试设备(ATE)对晶圆上的芯片进行功能与参数测试,筛选不合格芯片以控制成本。本文深入解析了其核心技术,包括自动化视觉系统对准、测试流程优化策略,并探讨如何利用测试数据驱动良率提升,展望了DFT与AI智能测试的未来趋势。

e4f5g6h的博客 517

xlrd、xlwt和openpyxl模块的比较和使用

xlrd、xlwt和openpyxl模块的比较: 1)xlrd:对xls、xlsx、xlsm文件进行读操作–读操作效率较高,推荐 2)xlwt:对xls文件进行写操作–写操作效率较高,但是不能执行xlsx文件 3)openpyxl:对xlsx、xlsm文件进行读、写操作–xlsx写操作推荐使用 一、xlrd:对xls、xlsx文件进行读操作 1.获取工作簿对象:xlrd.open_workbook...

y2Candice的博客 7116

sentaurus学习笔记(一)器件仿真

之前有跟大家说,以后转到sentaurus,因此silvaco会用的比较少,结果发现真的有一点贪心厌旧的感觉,现在基本上不用silvaco(lll¬ω¬)故这篇文章,将为大家带来的是关于sentaurus的结构仿真和器件的特性的提取。我们还是老规矩,先上结构图。 还是一个经典的IGBT结构,这是一个典型的N型IGBT,下面我将把一些相关的结构,和具体的写法用下面一幅图表达出来。 这里因为方便看,我们把器件的比例画的比较抽象。可以看到的是,这里有很多的距离参数是用一些变量名来写的,这也是sentaurus

weixin_43262021的博客 2万+

python使用xlrd、xlwt、openpyxl读写(大)Excel文件

文章主要内容 python中使用xlrd、xlwt库读写excel(xls)文件 python中使用openpyxl库读写excel(xlsx)文件(一般针对大文件) 前期准备: 安装xlrd、xlwt、openpyxl库(这里使用pip安装方法) UP使用的是win10、 pycharm、python3.4 在自己的电脑里面找到python3.4的安装位置找到pip.exe 将刚才的...

weixin_43043082的博客 6903

YOLOv8改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 1082

LLC型自驱动半桥谐振变换器:电压电流变化与自然换向解析

变换器的工作状态经历了多个阶段,从模态一的关断状态,到模态二和三的电流供电状态,每个阶段都得到了合理的设计和优化。的工作原理,尤其是在半个周期内的电压和电流变化。上图 展示了该变换器在工作时的电压和电流波形,它为我们揭示了变换器如何通过精确的电流和电压控制,优化性能并实现高效能转换。,并根据负载情况调整电流和电压的工作模式,能够极大提升变换器的效率,尤其是在零电压开通和自然换向的设计中,发挥着关键作用。这意味着,电流会随着时间周期的变化,呈现典型的振荡波形,从而达到良好的电流控制。是两个关键的电流变量。

weixin_43199439的博客 279

xlrd/xlwt与openpyxl处理Excel的主要区别与效率问题

区别: python中xlrd/xlwt与openpyxl处理Excel的主要区别在于写入操作,其中xlwt针对Ecxec2007之前的版本,即.xls文件,其要求单个sheet不超过65535行,而openpyxl则主要针对Excel2007之后的版本(.xlsx),它对文件大小没有限制。 效率: 整体而言,两种包对小文件的读写速度差别不大,而面对较大文件,xlrd/xlwt速度明显优于open...

weixin_30617561的博客 3276

【推荐100个unity插件之2】 DoTween动画插件的安装和使用整合(最全)

摘要:DOTween动画插件使用指南 DOTween是Unity中强大的动画插件,比原生动画更便捷。安装后需进行初始化设置,通过工具菜单生成程序集。主要提供通用方法(DOTween.To)和便捷方法(如transform.DOMove)两种动画实现方式。插件支持丰富的动画设置(循环、缓动等)和事件回调(OnComplete、OnKill)。还提供动画管理功能,包括清除(DOTween.Clear)、完成(DOTween.CompleteAll)和终止(DOTween.KillAll)动画。常用功能涵盖移动、

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

Python中的Excel文件操作指南:openpyxl、xlrd、xlwt和pandas详解

当涉及到操作Excel文件时,Python提供了多种库和工具,其中包括openpyxl、xlrd、xlwt和pandas。这些库都有自己的特点和用法,可以根据需求选择适合的工具来进行Excel文件的读取和写入操作。本文将分别介绍openpyxl、xlrd、xlwt和pandas这四个库的使用方法,并提供相应的示例代码,帮助读者快速上手。

愤怒的阿木木的博客 3477

使用Simulink对液流电池在微电网中的动态响应进行建模与仿真

本文介绍了使用Simulink对液流电池在微电网中的动态响应进行建模与仿真的方法。通过搭建包含液流电池、双向DC-DC变换器、分布式能源和负载的微电网模型,并设计基于SOC的控制器,详细说明了从模型创建到仿真运行的完整流程。重点分析了液流电池在不同负载条件下的动态特性,评估了系统响应速度、充放电效率和稳定性等性能指标。该仿真方法为验证液流电池在微电网中的应用提供有效工具,有助于优化参数设计和提升系统可靠性。

amy_mhd的博客 136

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 使用Python openpyxl模块读写Excel
下一篇: xlrd/xlwt与openpyxl的读写效率比较
Vincent_Wu_
博客等级 码龄12年 47粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值