python一些方便excel行操作的函数(一)
- import collections
- class headhandler():
- def __init__(self,mylist):
- self.mystorage={}
- self.mylist = mylist
- def delempty(self):
- '''
- 去除重复
- :return:
- '''
- while "" in self.mylist:
- self.mylist.remove("")
- def formatmydata(self,i):
- try:
- i=i.replace(":","")
- except Exception:
- i=i
- return i
- def fillempty(self):
- '''
- 只用于处理表头信息
- :return:
- '''
- # 对于不规则列表的处理办法,如果元素的下一个元素仍是字符串类型,或者不存在
- # 就插入或者用0填充
- self.delempty()
- for i in self.mylist:
- myindex = self.mylist.index(i)
- if myindex == 0 or (myindex % 2 == 0):
- try:
- nextelement = self.mylist[myindex + 1]
- if isinstance(self.mylist[myindex + 1], str):
- self.mylist.insert(myindex + 1, 0)
- except IndexError:
- self.mylist.append(0)
- self.mylist =list(map(self.formatmydata,self.mylist))
- print(self.mylist)
- def turntodict(self):
- self.fillempty()
- for i in self.mylist[::2]:
- self.mystorage[i] =self.mylist[self.mylist.index(i)+1]
- return self.mystorage
- def finalchart(self):
- self.delempty()
- self.mylist = list(map(self.formatmydata,self.mylist))
- #print(self.mylist)
- finalchart = self.turntodict()
- #print(finalchart)
- return finalchart
- class rowhandler(headhandler):
- def __init__(self,mylist):
- super(rowhandler,self).__init__(mylist)
- def fillempty(self):
- self.delempty()
- staticdict={}
- for myindex,myelement in enumerate(self.mylist):
- if myelement in staticdict:
- staticdict[myelement].append(myindex)
- else:
- staticdict[myelement]=[]
- staticdict[myelement].append(myindex)
- for i in list(staticdict.keys()):
- if len(staticdict[i])==1:
- del staticdict[i]
- else:
- self.mylist[staticdict[i][0]] =self.mylist[staticdict[i][0]]+'重量'
- self.mylist[staticdict[i][1]] = self.mylist[staticdict[i][1]] + '含量'
- self.mylist[staticdict[i][2]] = self.mylist[staticdict[i][2]] + '价格'
- return self.mylist
- def turntodict(self):
- self.fillempty()
- for i in self.mylist[::2]:
- self.mystorage[i] =self.mylist[self.mylist.index(i)+1]
- return self.mystorage
- #mylist = ['采购日期:', '', 43495.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '索赔金额:', '', '', '', '', '', 0.0, '', '']
- mydict= {'a':[1,2],'b':[2,3,4]}
- for i in list(mydict.keys()):
- print(mydict[i])
- if len(mydict[i])>2:
- del mydict[i]
- print(mydict)
- #print(wenwa.index('每吨人工:'))
输出结果:
- [1, 2]
- [2, 3, 4]
- {'a': [1, 2]}
- from anewclass import *
- class docgen:
- def __init__(self,mylist):
- self.mxrows = mylist[1::]
- self.columnline = mylist[0]
- self.addlist=[]#用于承载非规则行信息
- self.mxlist = []
- def addstring(self):
- mycounter = dict(collections.Counter(self.columnline))
- keypos = []
- finalist = []
- for i in mycounter.keys():
- if mycounter[i] > 1:
- for myindex, myelements in enumerate(self.columnline):
- if myelements == i:
- keypos.append(myindex)
- if myindex == len(self.columnline) - 1:
- finalist.append(keypos)
- keypos = []
- for i in finalist:
- self.columnline[i[0]] = self.columnline[i[0]] + "重量"
- self.columnline[i[1]] = self.columnline[i[1]] + "含量"
- self.columnline[i[2]] = self.columnline[i[2]] + "价格"
- return self.columnline
- def genmx(self):
- self.addstring()
- for i in self.mxrows:
- if i[0]=="":
- myhandler = rowhandler(i)
- self.addlist.append(myhandler.turntodict())
- else:
- myrow = rowhandler(self.columnline)
- self.columnline = myrow.fillempty()
- self.mxlist.append(dict(zip(self.columnline,i)))
- def returnall(self):
- self.genmx()
- return {'mx':self.mxlist,'others':self.addlist}
- wuwa =[
- ['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长', '锄头马', '铁重量', '铜含量', '铝含量', '片含量', '无限长',
'锄头马', '铁含量', '铜价格', '铝价格', '片价格', '无限长', '锄头马', '铁价格', '产值', '每吨毛利', '货品赢利'],- ['铜芯', 0.72, 11956.0, 19.617, 234540.852, 4.665, 0.068, 4.706, 0.506, 1.386, 1.63, 0.23780394555742468, 0.0034663811999796094,
0.23989396951623593, 0.025793954223377682, 0.07065300504664321, 0.08309119641127592, 39200.0, 7000.0, 5050.0, 4500.0, 2750.0, 1800.0,
11791.65009940358, -164.3499005964204, -3224.051999999979],- ['', '', '', '', '', '', '23尖角', 1.157, '35尖角', 1.766, '', '', '23尖角', 0.058979456593770706, '35尖角', 0.09002395881123515, '', '',
- '23尖角', 5000.0, '35尖角', 3500.0, '', '', '', ''],
- ['', '', '', '', '', '', '35平角', 1.073, '', '', '', '', '35平角', 0.05469745628791354, '', '', '', '', '35平角', 3000.0, '', '', '', '',
'', '']- ]
- saiwa = docgen(wuwa)
- print("===============mx===================")
- for i in saiwa.returnall()['mx']:
- print(i)
- print("===============others===================")
- for i in saiwa.returnall()['others']:
- print(i)
输出结果:
- [1, 2]
- [2, 3, 4]
- {'a': [1, 2]}
- ===============mx===================
- {'品名': '铜芯', '采购价': 0.72, '每吨成本': 11956.0, '重量': 19.617, '货品总成本': 234540.852, '铜重量': 4.665, '铝重量': 0.068, '片重量': 4.706,
'无限长重量': 0.506, '锄头马重量': 1.386, '铁重量': 1.63, '铜含量': 0.23780394555742468, '铝含量': 0.0034663811999796094, '片含量':
0.23989396951623593, '无限长含量': 0.025793954223377682, '锄头马含量': 0.07065300504664321, '铁含量': 0.08309119641127592, '铜价格': 39200.0,
'铝价格': 7000.0, '片价格': 5050.0, '无限长价格': 4500.0, '锄头马价格': 2750.0, '铁价格': 1800.0, '产值': 11791.65009940358, '每吨毛利':
-164.3499005964204, '货品赢利': -3224.051999999979}- ===============others===================
- {'23尖角重量': 1.157, '35尖角重量': 1.766, '23尖角含量': 0.058979456593770706, '35尖角含量': 0.09002395881123515, '23尖角价格': 5000.0,
- '35尖角价格': 3500.0}
- {'35平角重量': 1.073, '35平角含量': 0.05469745628791354, '35平角价格': 3000.0}
- def readexcel(path):
- datablock = pd.read_excel(path,sheet_name=0)
- print(len(datablock))
- wenwa = datablock.head(2)
- print(type(wenwa.index))
- print(datablock.index.__dict__)
- print("columns",datablock.columns[0])
- print("columns",datablock.head(2).columns)
- def loadexcel(path):
- mysheet = xlrd.open_workbook(path)
- mybook = mysheet.sheet_by_index(0)
- #print(mybook.row_values(0))
- colnamelist = mybook.row_values(2)
- row3 = mybook.row_values(3)
- #print(dict(zip(colnamelist,row3)))
- allrets = []
- for i in range(mybook.nrows):
- #print(mybook.row_values(i))
- allrets.append(mybook.row_values(i))
- print(mybook.nrows)
- for i in allrets:
- #print(i)
- pass
- return allrets
- def mergerows(mylist):
- splitline = 0
- doc = {}
- for i in mylist:
- print(i)
- k='每吨人工:'
- if k in i:
- print('in: ',mylist.index(i))
- splitline = mylist.index(i)
- doc["mx"] = mylist[2:splitline-1]
- doc["header"] = mylist[splitline:]
- return doc
- duwa = loadexcel('火烧片 2. MSCU3272441 铜芯.csv')
- doc = mergerows(duwa)
- for i in doc['header']:
- print(i)
- print("==================mx=============================")
- for i in doc['mx']:
- print(i)
- def dealmx(mylist):
- if mylist[0]=='':
- pass
- mylist1=['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长', '锄头马', '铁重量', '铜含量', '铝含量', '片含量',
- '无限长', '锄头马', '铁含量', '铜价格', '铝价格', '片价格', '无限长', '锄头马', '铁价格', '产值', '每吨毛利', '货品赢利']
- mylist2=['铜芯', 0.72, 11956.0, 19.617, 234540.852, 4.665, 0.068, 4.706, 0.506, 1.386, 1.63, 0.23780394555742468, 0.0034663811999796094,
0.23989396951623593, 0.025793954223377682, 0.07065300504664321, 0.08309119641127592, 39200.0, 7000.0, 5050.0, 4500.0, 2750.0, 1800.0,
11791.65009940358, -164.3499005964204, -3224.051999999979]- print(dict(zip(mylist1,mylist2)))
- print(collections.Counter(mylist1))
- print(mylist1.index('无限长'))
- def addstring(mylist):
- mycounter = collections.Counter(mylist)
- keypos=[]
- finalist=[]
- for i in mycounter.keys():
- if mycounter[i]>1:
- for myindex,myelements in enumerate(mylist):
- if myelements==i:
- keypos.append(myindex)
- if myindex==len(mylist)-1:
- finalist.append(keypos)
- keypos = []
- for i in finalist:
- mylist[i[0]]=mylist[i[0]]+"重量"
- mylist[i[1]]=mylist[i[1]]+"含量"
- mylist[i[2]] = mylist[i[2]] + "价格"
- return mylist
- print(addstring(mylist1))
- mycounter = collections.Counter(mylist1)
- print(dict(mycounter))
输出结果:
- 12
- ['火烧片', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
- ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
- ['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长', '锄头马', '铁重量', '铜含量', '铝含量', '片含量', '无限长',
'锄头马', '铁含量', '铜价格', '铝价格', '片价格', '无限长', '锄头马', '铁价格', '产值', '每吨毛利', '货品赢利']- ['铜芯', 0.72, 11956.0, 19.617, 234540.852, 4.665, 0.068, 4.706, 0.506, 1.386, 1.63, 0.23780394555742468, 0.0034663811999796094,
0.23989396951623593, 0.025793954223377682, 0.07065300504664321, 0.08309119641127592, 39200.0, 7000.0, 5050.0, 4500.0, 2750.0, 1800.0,
11791.65009940358, -164.3499005964204, -3224.051999999979]- ['', '', '', '', '', '', '23尖角', 1.157, '35尖角', 1.766, '', '', '23尖角', 0.058979456593770706, '35尖角', 0.09002395881123515, '', '',
'23尖角', 5000.0, '35尖角', 3500.0, '', '', '', '']- ['', '', '', '', '', '', '35平角', 1.073, '', '', '', '', '35平角', 0.05469745628791354, '', '', '', '', '35平角', 3000.0, '', '', '', '', '',
'']- ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
- ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '每吨人工:', '', '', '', '', '总人工', 0.0, '', '']
- in: 7
- ['采购日期:', '', 43495.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '索赔金额:', '', '', '', '', '', 0.0, '', '']
- ['计算日期:', '', 43594.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '总成本:', '', '', '', '', '', 234540.852, '', '']
- ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '总利润:', '', '', '', '', '', -3224.051999999979, '', '']
- ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '利润百分比:', '', '', '', '', '', -0.013746227885281063, '', '']
- ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '每吨人工:', '', '', '', '', '总人工', 0.0, '', '']
- ['采购日期:', '', 43495.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '索赔金额:', '', '', '', '', '', 0.0, '', '']
- ['计算日期:', '', 43594.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '总成本:', '', '', '', '', '', 234540.852, '', '']
- ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '总利润:', '', '', '', '', '', -3224.051999999979, '', '']
- ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '利润百分比:', '', '', '', '', '', -0.013746227885281063, '', '']
- ==================mx=============================
- ['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长', '锄头马', '铁重量', '铜含量', '铝含量', '片含量', '无限长',
- '锄头马', '铁含量', '铜价格', '铝价格', '片价格', '无限长', '锄头马', '铁价格', '产值', '每吨毛利', '货品赢利']
- ['铜芯', 0.72, 11956.0, 19.617, 234540.852, 4.665, 0.068, 4.706, 0.506, 1.386, 1.63, 0.23780394555742468, 0.0034663811999796094,
0.23989396951623593, 0.025793954223377682, 0.07065300504664321, 0.08309119641127592, 39200.0, 7000.0, 5050.0, 4500.0, 2750.0, 1800.0,
11791.65009940358, -164.3499005964204, -3224.051999999979]- ['', '', '', '', '', '', '23尖角', 1.157, '35尖角', 1.766, '', '', '23尖角', 0.058979456593770706, '35尖角', 0.09002395881123515, '', '',
'23尖角', 5000.0, '35尖角', 3500.0, '', '', '', '']- ['', '', '', '', '', '', '35平角', 1.073, '', '', '', '', '35平角', 0.05469745628791354, '', '', '', '', '35平角', 3000.0, '', '', '', '', '',
'']- {'品名': '铜芯', '采购价': 0.72, '每吨成本': 11956.0, '重量': 19.617, '货品总成本': 234540.852, '铜重量': 4.665, '铝重量': 0.068, '片重量': 4.706,
'无限长': 4500.0, '锄头马': 2750.0, '铁重量': 1.63, '铜含量': 0.23780394555742468, '铝含量': 0.0034663811999796094, '片含量': 0.23989396951623593,
'铁含量': 0.08309119641127592,
'铜价格': 39200.0, '铝价格': 7000.0, '片价格': 5050.0, '铁价格': 1800.0, '产值': 11791.65009940358, '每吨毛利': -164.3499005964204, '货品赢利':
-3224.051999999979}- Counter({'无限长': 3, '锄头马': 3, '品名': 1, '采购价': 1, '每吨成本': 1, '重量': 1, '货品总成本': 1, '铜重量': 1, '铝重量': 1, '片重量': 1,
'铁重量': 1, '铜含量': 1, '铝含量': 1, '片含量': 1, '铁含量': 1, '铜价格': 1, '铝价格': 1, '片价格': 1, '铁价格': 1, '产值': 1, '每吨毛利': 1,
'货品赢利': 1})- 8
- ['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长重量', '锄头马重量', '铁重量', '铜含量', '铝含量', '片含量',
'无限长含量', '锄头马含量', '铁含量', '铜价格', '铝价格', '片价格', '无限长价格', '锄头马价格', '铁价格', '产值', '每吨毛利', '货品赢利']- {'品名': 1, '采购价': 1, '每吨成本': 1, '重量': 1, '货品总成本': 1, '铜重量': 1, '铝重量': 1, '片重量': 1, '无限长重量': 1, '锄头马重量': 1,
'铁重量': 1, '铜含量': 1, '铝含量': 1, '片含量': 1, '无限长含量': 1, '锄头马含量': 1, '铁含量': 1, '铜价格': 1, '铝价格': 1, '片价格': 1,
'无限长价格': 1, '锄头马价格': 1, '铁价格': 1, '产值': 1, '每吨毛利': 1, '货品赢利': 1}
python一些方便excel行操作的函数(一)的更多相关文章
- Python基础-week03 集合 , 文件操作 和 函数详解
一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...
- Python语言系列-03-文件操作和函数
## 深浅拷贝 #!/usr/bin/env python3 # author:Alnk(李成果) # 赋值运算 # 可变的数据类型:由于数据类型可变,修改数据会在原来的数据的基础上进行修改, # 可 ...
- Python xlwt 写Excel相关操作记录
1.安装xlwt pip install xlwt 2.写Excel必要的几步 import xlwt book = xlwt.Workbook() #创建一个workbook,无编码设置编码book ...
- Python实现对excel的操作
1.操作excel使用第三方库openpyxl安装:pip install openpyxy引入:import openpyxl2.常用简单操作1)打开excel文件获取工作簿wb = openpyx ...
- python接口测试之excel的操作
1 用到的第三方库openpyxl,需要在命令窗口中下载安装pip install openpyxl,主要对xlsx格式的excel进行读取和编辑: xlrd库从excel中读取数据,支持xlsx x ...
- python 根据字符串语句进行操作再造函数(evec和eval方法)
例: #coding:utf-8 ''' Created on 2017年9月9日 @author: Bss ''' test_list=['def','a',''] test_list1=['pri ...
- Python 基础之集合相关操作与函数和字典相关函数
一:集合相关操作与相关函数 1.集合相关操作(交叉并补) (1)intersection() 交集 set1 = {"one","two","thre ...
- python之数据驱动Excel+ddt操作(方法二)
一.Mail163数据如下: 二.Excel+ddt代码如下: import xlrdimport unittestfrom selenium import webdriverfrom seleniu ...
- Python档案袋( 命令行操作 及 Os与Shutil文件操作补充 )
调用系统命令 import os #调用系统命令,输出只能输出到屏幕上,不能用变量接收 os.system("ipconfig") #调用系统命令,并把执行结果存到变量中 res= ...
随机推荐
- JavaSE基础(八)--Java 循环结构
Java 循环结构 - for, while 及 do...while 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. Java中有三种主要的循环结构: whi ...
- MySQL数据库CPU飙升紧急处理方法
MySQL数据库CPU飙升紧急处理方法 运行平稳的数据库,如果遇到CPU狂飙,到80%左右,那一定是开发写的烂SQL导致的,DBA首先要保证的是,数据库别跑挂了,所以我们要把那些运行慢的SQL杀死并记 ...
- Linux下安装jdk中遇到的坑
比如:我以jdk-8u211-linux-i586.tar.gz为例进行. 下载完成后解压到指定文件下先创建java文件目录,如果已存在就不用创建[root@lyh:] # mkdir -p /usr ...
- javaweb项目的全局监听配置
在项目中有时候会遇到全局监听的需求,而全局性的监听该如何配置,代码如下: package com.demo.listener; import javax.servlet.ServletContextE ...
- 2019上海网络赛 F. Rhyme scheme 普通dp
Rhyme scheme Problem Describe A rhyme scheme is the pattern of rhymes at the end of each line of a p ...
- DP_Milking Time
Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...
- docker-compose搭建elasticsearch+kibana环境,以及php使用elasticsearch
一.elasticsearch的Dockerfile 增加中文搜索插件analysis-ik FROM docker.elastic.co/elasticsearch/elasticsearch:7. ...
- Java 判断字符是大写小写或者数字
使用character类 Character.isLowerCase(Schar.charAt(i)) //获取字符串Schar中的某一个字符然后借用character类的方法来判断是不是小写. 其他 ...
- maven中添加memcached.jar配置方法
一.java memcached client的jar包下载地址:https://github.com/gwhalin/Memcached-Java-Client/downloads 二.cd jav ...
- Batch normalization简析
Batch normalization简析 What is batch normalization 资料来源:https://www.bilibili.com/video/av15997678/?p= ...