Openpyxl操作第二部分

1、openpyxl的两种优化模式。一般阅读模式内存使用率很高,约为原始文件大小的50倍,例如50 MB Excel文件为2.5 GB。所以可以使用只读、只写模式优化。

import os
import openpyxl
os.chdir(r'C:\Users\WIN7\Desktop\self_project\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.rows:
#    for cell in row:
#        print(cell.value) #read_only=False 可以试试大数据量得到表格读取
        
#只写模式
#在此再次将常规openpyxl.worksheet替换为更快的替代方法openpyxl.WriteOnlyWorksheet。
#当您要转储大量数据时,请确保已安装lxml
#使用只写模式的时候,只能自己创建新的工作表
from openpyxl import Workbook
wb = Workbook(write_only=True)
ws = wb.create_sheet()
# now we'll fill it with 100 rows x 200 columns
for irow in range(10000):
    ws.append(['%d' % i for i in range(1000)])
# save the file
wb.save('new_big_file1.xlsx') # doctest: +SKIP
print('finish')
#如果想让单元格带有样式或注释,请使用 openpyxl.cell.WriteOnlyCell() #这部分建议是直接在Excel上操作
from openpyxl import Workbook
wb = Workbook(write_only = True)
ws = wb.create_sheet()
from openpyxl.cell import WriteOnlyCell
from openpyxl.comments import Comment  #注释
from openpyxl.styles import Font  #单元格格式
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')
#插入行列
import openpyxl 
wb = openpyxl.Workbook()
ws = wb.active
#写入数据 写入十行两列的数据用于观察插入的效果
for irow in range(10):
    ws.append(range(2))
#插入默认值为一行或一列。
ws.insert_rows(2) #例如,在第2行(在现有第7行之前)插入一行:
ws.insert_cols(1) #例如,在第1行(在现有第7行之前)插入一行:
#删除行列
ws.delete_rows(4, 2)
ws.title = 'insert deleting'
ws["b10"] = '=SUM($c$1:$c$10)'
ws.move_range("b10", rows=5, cols=5, translate=True) #移动单元格  translate=True 参数是判定单元格的公式是非跟随移动
wb.save('insert2.xlsx')

与numpy与Pandas一起使用

#openpyxl支持和Pandas 和Numpy的使用。 主要是  openpyxl.utils.dataframe。
#这样的支持使得数据
import pandas as pd 
data = [["Fruit", "Quantity"],
    ["Kiwi", 3],
    ["Grape", 15],
    ["Apple", 3],
    ["Peach", 3],
    ["Pomegranate", 3],
    ["Pear", 3],
    ["Tangerine", 3],
    ["Blueberry", 3],
    ["Mango", 3],
    ["Watermelon", 3],
    ["Blackberry", 3],
    ["Orange", 3],
    ["Raspberry", 3],
    ["Banana", 3]]
df = pd.DataFrame(data)
from openpyxl.utils.dataframe import dataframe_to_rows
wb = Workbook()
ws = wb.active


for r in dataframe_to_rows(df, index=True, header=True):
    ws.append(r)
    
for cell in ws['A'] + ws[1]:
    cell.style = 'Pandas'  #使用Pandas的格式

wb.save("pandas_openpyxl.xlsx")    
#wb.save('pandas_save.xlsx')
#将工作表转换出DataFrame
wb = openpyxl.load_workbook("pandas_openpyxl.xlsx")
ws = wb.active
df = pd.DataFrame(ws.values)
df
#表格切出数据做DataFrame的索引  示例不够清晰 --自己来
import openpyxl  
import pandas as pd
from itertools import islice
wb = openpyxl.load_workbook('headers_dataframe.xlsx')
ws = wb['Sheet1']
data = ws.values
cols = next(data)[1:] #next 取到 data的第一行的数据  【1:】 取从第二个
print(cols)
data = list(data)
print(data)
idx = [r[0] for r in data ]
print(idx) 
data = (islice(r, 1, None) for r in data)  #islice 跳过几行导入数据  参数:islice(文件名, 开始行, 结束行):
print('----')
df = pd.DataFrame(data, index=idx, columns=cols)
df
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值