社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python-openpyxl教程(四)

庄周幻梦 • 4 年前 • 626 次点击  

前文:
Python-openpyxl教程(一): 教程篇
Python-openpyxl教程(二): 简单使用篇
Python-openpyxl教程(三): openpyxl性能篇


优化模式

只读模式

有时,您将需要打开或写入非常大的XLSX文件,而openpyxl中的通用例程将无法处理该负载。幸运的是,有两种模式使您可以(几乎)恒定的内存消耗来读取和写入无限量的数据。

简介 openpyxl.worksheet._read_only.ReadOnlyWorkSheet

from openpyxl import load_workbook

wb = load_workbook(filename='large_file.xlsx', read_only=True)
ws = wb['big_data']

for row in ws.row:
    for cell in row:
        print(cell.value)

# Close the workbook after reading
wb.close()
\color {red} {!警告}
- openpyxl.worksheet._read_only.ReadOnlyWorksheet 是只读的。
- 与普通工作薄不同,只读工作薄将使用延迟加载。必须使用该 close() 方法显式关闭工作薄。

返回的单元格不是常规的, openpyxl.cell.cell.Cell 而是 openpyxl.cell._read_only.ReadOnlyCell

工作表尺寸

只读模式依赖于创建文件的应用程序和库,该文件提供有关工作表的正确信息,尤其是文件的已使用部分,称为维度。某些应用程序对此设置不正确。您可以使用 ws.calculate_dimension() 检查工作表的外观尺寸。如果返回的范围不正确,假设是A1:A1, 然后简单的重置max_row和max_column属性,即可使用该文件。

ws.reset_dimensions()

只写模式

再一次,常规 openpyxl.worksheet.worksheet.Worksheet 已由更快的替代方法代替 openpyxl.worksheet._write_only.WriteOnlyWorksheet 。当您要转储大量数据时,请确保已安装lxml。

from openpyxl import Workbook

wb = Workbook(write_only=True)
ws = wb.create_sheet()

# 创建一个100*200的工作表
for irow in range(100):
    ws.append(['%d' % i for i in range(200)])

# 保存为文件
wb.save('new_big_file.xlsx')

如果您想让单元格带有样式或注释,请使用 openpyxl.cell.WriteOnlyCell()

from openpyxl import Workbook
from openpyxl.cell import WriteOnlyCell
from openpyxl.comments import Comment
from openpyxl.styles import Font

wb = Workbook(write_only=True)
ws = wb.create_sheet()
cell = WriteOnlyCell(ws, value='hello world')
cell.font = Font(name='Courier', size=36)
cell.comment = Comment(text='A comment', author="Author's Name")
ws.append([cell, 3.14, None])
wb.save('write_only_file.xlsx')

这将创建一个只有一张工作表的只写工作薄,并附加一行三个单元格:一个带有自定义字体和注释的文本单元格,一个浮点数和一个空单元格(无论如何将会被丢弃)。

\color {red} {!警告}
- 与普通工作薄不同,新创建的只写工作薄不包含任何工作表。必须使用该 create_sheet() 方法专门创建工作表。
- 在只写工作薄中,只能用添加行 append() 。无法使用 cell() 或在任意位置写入(或读取)单元 iter_rows()
- 它能够导出无限量的数据(甚至比Excel实际处理的数据还要多),同时将内存使用量保持在10MB一下。
- 只写工作薄只能保存一次。此后每次将工作薄或append()保存到现有工作表的尝试都会引发 openpyxl.utilsexceptions.WorkbookAlreadySaved 异常。
- 必须在添加单元之前创建文件中实际单元数据之前出现在文件中的所有内容,因此在此之前必须将其写入文件中。例如,应在添加单元格之前设置 freeze_panes

原文: https://openpyxl.readthedocs.io/en/stable/optimized.html#read-only-mode

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/110842
 
626 次点击