利用python进行数据bosa原厂数据转换

from openpyxl import Workbook,load_workbook
from openpyxl.styles import *
import xlrd
import xlwt


#计算bosa_vapd
workbook1 = xlrd.open_workbook('0509-PIC BOSA Test Report_460units.xls')
table = workbook1.sheet_by_name(sheet_name='Sheet1')
#table_list = table.row_values(rowx=3, start_colx=0, end_colx=None)
#table_list1 = table.col.values(colx=0,start_rowx=0,end_rowx=None)
table_list1 = table.col_values(colx=3,start_rowx=3,end_rowx=None)
#print(table_list1)
num = 3



book = xlwt.Workbook(encoding='utf-8',style_compression=0)

sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True)
col=('bosa_sn','bosa_type','bosa_pn','bosa_vapd','bosa_ith','bosa_imod','bosa_impd','bosa_refpwr','bosa_tiavcc','bosa_apd_resp','bosa_apd_comp','bosa_apd_max_i','darkcurrent_vapd10','darkcurrent_vop','pin_resp','rf_oma','rf_out_target','target_er_set')
for i in range(0,len(col)):
    sheet.write(0,i,col[i])

bosa_type="PA6260"
bosa_pn="PA6-GPON-ONU-BOSA"
bosa_ith="80"
bosa_imod="380"
bosa_refpwr="2500"
bosa_tiavcc="1"
bosa_apd_comp="110"
bosa_apd_max_i="10"
pin_resp="-1"
rf_oma="-1"
rf_out_target="-1"
target_er_set="13"
a=1

print(len(table_list1))

for op in range(0,len(table_list1)):
    table_list = table.row_values(rowx=op+3, start_colx=0, end_colx=None)
    print(table_list)
    sn=table_list[0]
    vop=table_list[8]
    pop=table_list[4]
    gain=table_list[11]
    io=table_list[10]
    iop=table_list[9]

    bosa_vapd = round(vop*100)
    bosa_impd = round(pop)
    bosa_apd_resp = round(gain*8.5)
    darkcurrent_vapd10=round(io*100)
    darkcurrent_vop = round(iop*10)

    value=(sn,bosa_type,bosa_pn,bosa_vapd,bosa_ith,bosa_imod,bosa_impd,bosa_refpwr,bosa_tiavcc,bosa_apd_resp,bosa_apd_comp,bosa_apd_max_i,darkcurrent_vapd10,darkcurrent_vop,pin_resp,rf_oma,rf_out_target,target_er_set)

    for j in range(0,len(value)):
        sheet.write(op+1,j,value[j])

    
    
book.save('test1.xls')
    

原始数据参数:

转换完后的数据:

import xlwt

book = xlwt.Workbook(encoding='utf-8',style_compression=0)

sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True)

col=('bosa_sn','bosa_type','bosa_pn','bosa_vapd','bosa_ith','bosa_imod','bosa_impd','bosa_refpwr','bosa_tiavcc','bosa_apd_resp','bosa_apd_comp','bosa_apd_max_i','darkcurrent_vapd10','darkcurrent_vop','pin_resp','rf_oma','rf_oma','rf_out_target','target_er_set')

for i in range(0,len(col)):
    sheet.write(0,i,col[i])

book.save('test.xls')

from openpyxl import Workbook,load_workbook
from openpyxl.styles import *
import xlrd
import xlwt

#wb = openpyxl.load_workbook('0509-NP2659G-BOSA参数模板表.xls')
#type(wb)
#workbook = xlrd.open_workbook('0509-NP2659G-BOSA参数模板表.xls')
#table = workbook.sheet_by_name(sheet_name='Sheet1')
#print(table)
workbook = xlwt.Workbook()




#计算bosa_vapd
workbook1 = xlrd.open_workbook('0509-PIC BOSA Test Report_460units.xls')
table = workbook1.sheet_by_name(sheet_name='Sheet1')
table_list = table.row_values(rowx=3, start_colx=0, end_colx=None)
print(table_list)

sn=table_list[0]
vop=table_list[8]
pop=table_list[4]
gain=table_list[11]
io=table_list[10]
iop=table_list[9]

bosa_vapd = round(vop*100)
bosa_impd = round(pop)
bosa_apd_resp = round(gain*8.5)
darkcurrent_vapd10=round(io*100)
darkcurrent_vop = round(iop*10)

ls=[sn,bosa_vapd,bosa_impd,bosa_apd_resp,darkcurrent_vapd10,darkcurrent_vop]
print(ls[0])

wb = Workbook()
wb_sheet = wb.create_sheet("Sheet1")
wb_sheet.cell(row=1,column=1,value=ls[0])
wb.save('bosa_config.xlsx')



存在的问题补充:

问题描述

使用 Pandas 的 read_excel 方法读取一个 16 万行的 Excel 文件报 AssertionError 错误:

"/Users/Zzy/Desktop/test/csv_test/venv/lib/python3.7/site-packages/xlrd/xlsx.py", line 637, in do_row
    assert 0 <= self.rowx < X12_MAX_ROWS
AssertionError

背后原理

Excel 文件的格式曾经发生过一次变化,在 Excel 2007 以前,使用扩展名为 .xls 格式的文件,这种文件格式是一种特定的二进制格式,最多支持 65,536 行,256 列表格。从 Excel 2007 版开始,默认采用了基于 XML 的新的文件格式 .xlsx ,支持的表格行数达到了 1,048,576,列数达到了 16,384。需要注意的是,将 .xlsx 格式的文件转换为 .xls 格式的文件时,65536 行和 256 列之后的数据都会被丢弃。

版本|最大行数|最大列数|文件格式 --|--|--|-- 早于 Excel 2007 的版本|65,536|256|.xls Excel 2007 及以后版本|1,048,576|16,384|.xlsx

Pandas 读取 Excel 文件的引擎是 xlrd , xlrd 虽然同时支持 .xlsx 和 .xls 两种文件格式,但是在源码文件 xlrd/sheet.py 中限制了读取的 Excel 文件行数必须小于 65536,列数必须小于 256。

if self.biff_version >= 80:
    self.utter_max_rows = 65536
else:
    self.utter_max_rows = 16384
self.utter_max_cols = 256

这就导致,即使是 .xlsx 格式的文件, xlrd 依然不支持读取 65536 行以上的 Excel 文件(源码中还有一个行数限制是 16384,这是因为 Excel 95 时代, xls 文件所支持的最大行数是 16384)。

解决办法

openpyxl 是一个专门用来操作 .xlsx 格式文件的 Python 库,和 xlrd 相比它对于最大行列数的支持和 .xlsx 文件所定义的最大行列数一致。

首先安装 openpyxl :

pip install openpyxl

Pandas 的 read_excel 方法中,有 engine 字段,可以指定所使用的处理 Excel 文件的引擎,填入 openpyxl ,再读取文件就可以了。

import pandas as pd


df = pd.read_excel('./data.xlsx', engine='openpyxl')
print(len(df))  # 160000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搞个项目

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值