美文网首页
Python-openpyxl教程3 - 读写性能

Python-openpyxl教程3 - 读写性能

作者: 庄周幻梦 | 来源:发表于2021-04-01 18:03 被阅读0次

    前文:
    Python-openpyxl教程1 - openpyxl简介
    Python-openpyxl教程2 - 简单使用


    性能

    openpyxl尝试在功能和性能之间取得平衡。如有疑问,我们将重点放在优化功能上:建立API后,性能调整将变得更加容易。与其他库和应用程序相比,内存使用率很高,约为原始文件大小的50倍。例如50MB Excel文件为2.5GB。由于许多用例仅涉及读取或写入文件,因此"性能模式"模式意味着问题不大。

    BenchMarks

    所有基准都是综合性的,并且高度依赖于硬件,但是它们仍然可以提供指示。

    写入性能

    所述基准代码 可以调整,以使用更多的片材,并调整数据的比例是字符串。由于使用的Python版本也会显著影响性能,因此也可以使用驱动程序脚本 在有tox环境的情况下对不同的Python版本进行测试。

    性能与出色的替代库xlsxwriter进行了比较

    Versions:
    python: 3.6.9
    openpyxl: 3.0.1
    xlsxwriter: 1.2.5
    
    Dimensions:     #尺寸
        Rows = 1000
        Cols = 50
        Sheets = 1
        Proportion text = 0.10
    
    Times:
        xlsxwriter            :   0.59
        xlsxwriter (optimised):   0.54
        openpyxl              :   0.73
        openpyxl (optimised)  :   0.61
    
    
    Versions:
    python: 3.7.5
    openpyxl: 3.0.1
    xlsxwriter: 1.2.5
    
    Dimensions:
        Rows = 1000
        Cols = 50
        Sheets = 1
        Proportion text = 0.10
    
    Times:
        xlsxwriter            :   0.65
        xlsxwriter (optimised):   0.53
        openpyxl              :   0.70
        openpyxl (optimised)  :   0.63
    
    
    Versions:
    python: 3.8.0
    openpyxl: 3.0.1
    xlsxwriter: 1.2.5
    
    Dimensions:
        Rows = 1000
        Cols = 50
        Sheets = 1
        Proportion text = 0.10
    
    Times:
        xlsxwriter            :   0.54
        xlsxwriter (optimised):   0.50
        openpyxl              :   1.10
        openpyxl (optimised)  :   0.57
        
    
    \color {skyblue} {!备注}
    \color {skyblue} {从不同Python版本下写入相同数据的耗时对比,xlsxwriter要明显优于openpyxl,包括在优化模式下。}

    读取性能

    使用以前的错误报告 提供的文件来衡量性能,并与较早的xlrd库进行比较。xlrd主要用于.xls文件的较旧BIFF文件格式,但是它对XLSX的支持有限。

    Benchmark 的代码显示了在处理文件时选择正确选项的重要性。在这种情况下,禁用外部连接将停止openpyxl打开链接的工作表的缓存副本。

    库之间的主要区别在于,openpyxl的只读模式几乎可以立即打开工作薄,使其适合于多个线程,这也大大减少了内存的使用。尽管xlrd会相应的注释单元格,但是xlrd不会自动将日期和时间转换为Python日期时间,但是在客户端代码这样做会大大降低性能。

    python: 3.6.9
    xlread: 1.2.0
    openpyxl: 3.0.1
    
    openpyxl, read-only
        Workbook loaded 1.14s
        OptimizationData 23.17s
        Output Model 0.00s
        >>DATA>> 0.00s
        Store days 0% 23.92s
        Store days 100% 17.35s
        Total time 65.59s
        0 cells in total
    
    Versions:
    python: 3.7.5
    xlread: 1.2.0
    openpyxl: 3.0.1
    
    openpyxl, read-only
        Workbook loaded 0.98s
        OptimizationData 21.35s
        Output Model 0.00s
        >>DATA>> 0.00s
        Store days 0% 20.70s
        Store days 100% 16.16s
        Total time 59.19s
        0 cells in total
    
    Versions:
    python: 3.8.0
    xlread: 1.2.0
    openpyxl: 3.0.1
    
    openpyxl, read-only
        Workbook loaded 0.90s
        OptimizationData 19.58s
        Output Model 0.00s
        >>DATA>> 0.00s
        Store days 0% 19.35s
        Store days 100% 15.02s
        Total time 54.85s
        0 cells in total
    

    并行化

    读取工作表会占用大量CPU,这限制了并行化可带来的任何好处。但是,如果您主要对转储工作薄的内容感兴趣,则可以使用openpyxl的只读模式并打开工作薄的多个实例,并利用多个CPU。

    使用与读取性能相同的源文件的示例代码显示,由于创建了额外的Python进程,因此性能可以合理地扩展而开销却很小。


    来源:https://openpyxl.readthedocs.io/en/stable/performance.html

    相关文章

      网友评论

          本文标题:Python-openpyxl教程3 - 读写性能

          本文链接:https://www.haomeiwen.com/subject/lpztkltx.html