python处理office⽂件的第三⽅库_Python读写Excel⽂件第三
⽅库汇总,你。。。
Python
Python开发
Python语⾔
Python读写Excel⽂件第三⽅库汇总,你想要的都在这⼉!
---恢复内容开始---
常见库简介
xlrd
xlrd是⼀个从Excel⽂件读取数据和格式化信息的库,⽀持.xls以及.xlsx⽂件。
1、xlrd⽀持.xls,.xlsx⽂件的读
2、通过设置on_demand变量使open_workbook()函数只加载那些需要的sheet,从⽽节省时间和内存(该⽅法对.xlsx⽂件⽆效)。
3、xlrd.Book对象有⼀个unload_sheet⽅法,它将从内存中卸载⼯作表,由⼯作表索引或⼯作表名称指定(该⽅法对.xlsx⽂件⽆效)
xlwt
xlwt是⼀个⽤于将数据和格式化信息写⼊旧Excel⽂件的库(如.xls)。
1、xlwt⽀持.xls⽂件写。
xlutils
xlutils是⼀个处理Excel⽂件的库,依赖于xlrd和xlwt。
1、xlutils⽀持.xls⽂件。
2、⽀持Excel操作。
xlwings
xlwings是⼀个可以实现从Excel调⽤Python,也可在python中调⽤Excel的库。
1、xlwings⽀持.xls读,⽀持.xlsx⽂件读写。
2、⽀持Excel操作。
3、⽀持VBA。
4、强⼤的转换器可以处理⼤部分数据类型,包括在两个⽅向上的numpy array和pandas DataFrame。
openpyxl
openpyxl是⼀个⽤于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm⽂件的库。⼩编整理⼀套Python资料和PDF,有需要Python学习资料可以加学习:631441315 ,反正闲着也是闲着呢,不如学点东西啦~~
1、openpyxl⽀持.xlsx⽂件的读写。
2、⽀持Excel操作。
3、加载⼤.xlsx⽂件可以使⽤read_only模式。
4、写⼊⼤.xlsx⽂件可以使⽤write_only模式。
xlsxwriter
xlsxwriter是⼀个⽤于创建Excel .xlsx⽂件的库。
1、xlswriter⽀持.xlsx⽂件的写。
2、⽀持VBA。
3、写⼊⼤.xlsx⽂件时使⽤内存优化模式。
win32compython怎么读取excel文件数据
win32com库存在于pywin32中,是⼀个读写和处理Excel⽂件的库。
1、win32com⽀持.xls,.xlsx⽂件的读写,⽀持.xlsx⽂件的写。
2、⽀持Excel操作。
DataNitro
DataNitro是⼀个内嵌在Excel中的插件。
1、DataNitro⽀持.xls,.xlsx⽂件的读写。
2、⽀持Excel操作。
3、⽀持VBA。
4、收费
pandas
pandas通过对Excel⽂件的读写实现数据输⼊输出
1、pandas⽀持.xls,.xlsx⽂件的读写。
2、⽀持只加载每个表的单⼀⼯作页。
环境配置及可实现操作
读写测试
测试计算机硬件和系统
电脑型号 微星 MS-7846 台式电脑
操作系统 Windows 7 旗舰版 64位 SP1 ( DirectX 11 )
处理器 英特尔 Pentium(奔腾) G3260 @ 3.30GHz 双核
主板 微星 H81M-P32L (MS-7846) ( 英特尔 Haswell - Lynx Point )
内存 4 GB ( ⾦⼠顿 DDR3 1600MHz )
主硬盘 西数 WDC WD5000AZLX-00ZR6A0 ( 500 GB / 7200 转/分 )
显卡 英特尔 Haswell Integrated Graphics Controller ( 256 MB / 微星 )
测试⽤例
⽤例1. 读.xls⽂件的整个表(表有5个分页,每个分页有2000⾏1200列的整数)。⽤例2. 读.xlsx⽂件的整个表(表有5个分页,每个分页有2000⾏1200列的整数)。⽤例3. 读.xls⽂件的整个表(表有1个分页,页有2000⾏1200列的整数)。
⽤例4. 读.xlsx⽂件的整个表(表有1个分页,页有2000⾏1200列的整数)。
⽤例5. 写.xls⽂件的整个表(表有5个分页,每个分页有2000⾏1200列的整数)。
⽤例6. 写.xlsx⽂件的整个表(表有5个分页,每个分页有2000⾏1200列的整数)。
⽤例7. 写.xls⽂件的整个表(表有1个分页,页有2000⾏1200列的整数)。
⽤例8. 写.xlsx⽂件的整个表(表有1个分页,页有2000⾏1200列的整数)。
测试结果
注1.xlwt和pandas每个⼯作页最多写⼊256列,因此测试⽤例修改为每页有2000⾏256列的整数.
注2.xlutils读写依赖于xlrd和xlwt,不单独测试。
注3.openpyxl测试两种模式,⼀是普通加载写⼊,⼆是read_only/write_only模式下的加载写⼊。
注4.DataNitro要收费,且需依托Excel使⽤,本次不测试。
读写性能⽐较
单从读写的性能上考虑,win32com的性能是最好的,xlwings其次。
openpyxl虽然操作Excel的功能强⼤,但读写性能过于糟糕,尤其是写⼤表时,会占⽤⼤量内存(把我的4G内存⽤完了),开启read_only和write_only模式后对其性能有⼤幅提升,尤其是对读的性能提升很⼤,使其⼏乎不耗时(0.01秒有点夸张,不过确实是加载上了)。pandas 把Excel当作数据读写的容器,为其强⼤的数据分析服务,因此读写性能表现中规中矩,但其对Excel⽂件兼容性是最好的,⽀持读
写.xls,.xlsx⽂件,且⽀持只读表中单⼀⼯作页。同样⽀持此功能的库还有xlrd,但xlrd只⽀持读,并不⽀持写,且性能不突出,需要配合xlutils进⾏Excel操作,并使⽤xlwt保存数据,⽽xlwt只能写⼊.xls⽂件(另⼀个可以写⼊.xls⽂件的库是pandas,且这两个写⼊的Excel⽂件最多只能有256列,其余库就我⽬前的了解均只能写⼊.xlsx⽂件),性能⼀般。xlsxwriter功能单⼀,⼀般⽤来创建.xlsx⽂件,写⼊性能中庸。win32com拥有最棒的读写性能,但该库存在于pywin32的库中,⾃⾝没有完善的⽂档,使⽤略吃⼒。xlwings拥有和win32com不相伯仲的读写性能,强⼤的转换器可以处理⼤部分数据类型,包括⼆维的numpy array和pandas DataFrame,可以轻松搞定数据分析的⼯作。
综合考虑,xlwings的表现最佳,正如其名,xlwings——Make Excel Fly!
便捷性⽐较
本测试⽬前只是针对Excel⽂件的读写,并未涉及Excel操作,单从读写的便捷性来讲,各库的表现难分上下,但是win32com和xlwings这两个库可以在程序运⾏时实时在打开的Excel⽂件中进⾏操作,实
现过程的可视化,其次xlwings的数据结构转换器使其可以快速的为Excel ⽂件添加⼆维数据结构⽽不需要在Excel⽂件中重定位数据的⾏和列,因此从读写的便捷性来⽐较,仍是xlwings胜出。
测试代码
计时
importtimeitif __name__ == '__main__':#使⽤timeit计时
t = timeit.Timer('??()', setup='from __main__ import ??')print(t.timeit(number=1))
xlrd
importxlrddeftest_xlrd_on_demand_false():#f = xlrd.open_workbook('test_cases\read_xls.xls', on_demand=False)
f = xlrd.open_workbook('test_cases\read_xlsx.xlsx', on_demand=False)deftest_xlrd_on_demand_true():#f =
xlrd.open_workbook('test_cases\read_xls.xls', on_demand=True)
f = xlrd.open_workbook('test_cases\read_xlsx.xlsx', on_demand=True)
f.sheet_by_index(0)
xlwt
importxlwt
book=xlwt.Workbook()deftest_xlwt():for s in range(5):
sheet=book.add_sheet(str(s))for i in range(2000):for j in range(256):
sheet.write(i, j,65536)
book.save('test_cases\write_xls.xls')
xlwings
importxlwingsdeftest_xlwings_read():#f = xlwings.Book('test_cases\read_xls.xls')
f = xlwings.Book('test_cases\read_xlsx.xlsx')importnumpy as np
f= xlwings.Book('')
d= np.zeros([2000, 1200])
d+= 65536
deftest_xlwings_write():for s in range(1):
sheet=f.sheets.add()
sheet.range('A1').value =d
f.save('test_cases\write_xlsx.xlsx')
openpyxl
importopenpyxldeftest_openpyxl_read():
f= openpyxl.load_workbook('test_cases\read_xlsx.xlsx', read_only=True)
c= [65536] * 1200f= openpyxl.Workbook(write_only=True)deftest_openpyxl_write():for i in range(1): sheet= f.create_sheet(title=str(i))for row in range(2000):
sheet.append(c)
f.save('test_cases\write_xlsx.xlsx')
xlsxwriter
importxlsxwriter
workbook= xlsxwriter.Workbook('test_cases\write_xlsx.xlsx')deftest_xlsxwriter():for s in range(1): worksheet=workbook.add_worksheet()for i in range(2000):for j in range(1200):
worksheet.write(i, j,65536)
workbook.close()
win32com
importwin32com.client as win32
excel= ache.EnsureDispatch('Excel.Application')deftest_win32com_read():#wb =
excel.Workbooks.Open('E:\excel\test_cases\read_xls.xls')
wb = excel.Workbooks.Open('E:\excel\test_cases\read_xlsx.xlsx')#excel.Visible = True
wb=excel.Workbooks.Add()deftest_win32com_write():for i in range(1):
ws=wb.Worksheets.Add()
ws.Range("A1:ATD2000").Value = 65536wb.SaveAs('E:\excel\test_cases\write_xlsx.xlsx')
excel.Application.Quit()
pandas
importpandas as pddeftest_pandas_read():for i in range(1, 6):
sheet_name= "Sheet" +str(i)#df = pd.read_excel('test_cases\read_xls.xls', sheet_name) df = pd.read_excel('test_cases\read_xlsx.xlsx', sheet_name)importnumpy as np
d= np.zeros([2000, 255])
d+= 65536df=pd.DataFrame(d)#writer = pd.ExcelWriter('test_cases\write_xls.xls') writer = pd.ExcelWriter('test_cases\write_xlsx.xlsx')deftest_pandas_write():
<_excel(writer,'Sheet1')
<_excel(writer,'Sheet2')
<_excel(writer,'Sheet3')
<_excel(writer,'Sheet4')
<_excel(writer,'Sheet5')
writer.save()
---恢复内容结束---
内容来源于⽹络,如有侵权请删除