↵
前言:
记录并分享 python & Excel 交互历程 (二)
目的:
前文中提到 导入 二维图像中 横坐标及纵坐标的离散数据 ,数据量较大时 手工录入就稍显困难,遂本文诞生;
https://www.runoob.com/python3/python3-list.html Python3 列表
https://pypi.org/project/xlrd/ xlrd 库 >>> pip install xlrd
内容:
1. 一份记录好数据的表格 (简单示意)
eg:
key | value |
0 | 11.1 |
1 | 12.1 |
2 | 13.1 |
3 | 14.1 |
4 | 15.1 |
5 | 16.1 |
6 | 17.1 |
7 | 18.1 |
8 | 19.1 |
9 | 20.1 |
10 | 21.1 |
2. 将表格中的 key | value 所指向的数据提取出来,并放入期望填充的地方;以下是代码实现部分:
import xlrd
# row -- 行
# col -- 列
class ExcelTest():
def __init__(self, excelPath):
self.data = xlrd.open_workbook(excelPath)
self.table = self.data.sheets()[0]
# print("table",self.table)
# 获取第一行值
self.keys = self.table.row_values(0)
# print("keys",self.keys)
# 获取总的行数
self.rowNum = self.table.nrows
# print("rowNum",self.rowNum)
# 获取各行数据
self.rows = self.table.row_values(0) # 括号 参数指向具体地址
# print("rowData",self.rows)
# 获取总列数
self.colNum = self.table.ncols
# print("colNum",self.colNum)
# 获取各列数据
self.cols = self.table.col_values(0)
# print("colData",self.cols)
def compose_data_pair(self): # 组合数据格式 [row0,col0],[row1,col1],.....
if self.rowNum <= 1:
print("总行 数据小于1")
else:
new_data = []
seq = 1
for i in range(self.rowNum-1):
values = self.table.row_values(seq) # 从第二行取对应values值
new_data.append(values)
seq += 1
return new_data
def compose_data_signel(self): # 组合数据格式 [row0,row1,.....] [col0,col1,.....]
if self.rowNum <= 1 or self.colNum <=1:
print("总行/列 数据小于1")
else:
rowKey = [] # key
colValue = [] # value
seq = 1
for i in range(self.rowNum-1):
values = self.table.row_values(seq)
rowKey.append(values[0])
colValue.append(values[1])
seq += 1
return rowKey, colValue
if __name__ == "__main__":
filepath = "../../xxx.xlsx" # excel 路径地址 注意斜杠 / 方向
data = ExcelTest(filepath)
print("---",data.compose_data_pair())
print("+++",data.compose_data_signel()) # 获取 rowKey $ colValue 对应到 (x,y)
运行结果:
优化方向&笔记:
1. 实际待提取的excel数据可能较为复杂,需要利用 关键字索引 “key" 或者”value“去寻找指定单元格中的数据并存入列表;
2. 经过以上步骤存入列表的数据导入前文中得到想拟合的曲线及方程式;