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行操作的函数(一)的更多相关文章

  1. Python基础-week03 集合 , 文件操作 和 函数详解

    一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...

  2. Python语言系列-03-文件操作和函数

    ## 深浅拷贝 #!/usr/bin/env python3 # author:Alnk(李成果) # 赋值运算 # 可变的数据类型:由于数据类型可变,修改数据会在原来的数据的基础上进行修改, # 可 ...

  3. Python xlwt 写Excel相关操作记录

    1.安装xlwt pip install xlwt 2.写Excel必要的几步 import xlwt book = xlwt.Workbook() #创建一个workbook,无编码设置编码book ...

  4. Python实现对excel的操作

    1.操作excel使用第三方库openpyxl安装:pip install openpyxy引入:import openpyxl2.常用简单操作1)打开excel文件获取工作簿wb = openpyx ...

  5. python接口测试之excel的操作

    1 用到的第三方库openpyxl,需要在命令窗口中下载安装pip install openpyxl,主要对xlsx格式的excel进行读取和编辑: xlrd库从excel中读取数据,支持xlsx x ...

  6. python 根据字符串语句进行操作再造函数(evec和eval方法)

    例: #coding:utf-8 ''' Created on 2017年9月9日 @author: Bss ''' test_list=['def','a',''] test_list1=['pri ...

  7. Python 基础之集合相关操作与函数和字典相关函数

    一:集合相关操作与相关函数 1.集合相关操作(交叉并补) (1)intersection() 交集 set1 = {"one","two","thre ...

  8. python之数据驱动Excel+ddt操作(方法二)

    一.Mail163数据如下: 二.Excel+ddt代码如下: import xlrdimport unittestfrom selenium import webdriverfrom seleniu ...

  9. Python档案袋( 命令行操作 及 Os与Shutil文件操作补充 )

    调用系统命令 import os #调用系统命令,输出只能输出到屏幕上,不能用变量接收 os.system("ipconfig") #调用系统命令,并把执行结果存到变量中 res= ...

随机推荐

  1. 1-2-K Game

    题目链接:https://vjudge.net/contest/330119#problem/E 题目大意可以理解为: 1.给出n个物品以及k,Alice与Bob轮流拿1个,或2个,或k个物品,Ali ...

  2. Windows远程连接server(Linux系统)及可视化

    方法1:命令行连接后使用server上安装好的可视化编辑器IDE: Step 1: 工具准备:putty.exe:Xming-6-9-0-31-setup.exe:Xming-fonts-7-7-0- ...

  3. [转帖]Windows安全认证是如何进行的?[Kerberos篇]

    Windows安全认证是如何进行的?[Kerberos篇] NTLM 的简单看了一下 基本上了解了.. 这个KERBEROS 的看不太懂 感觉说的我也有点迷糊.. 虽然是对称加密的 但是不清不楚的.. ...

  4. Linux命令中dd的作用

    Linux命令中用vi编辑文本时dd的作用是删除整行文本的信息.

  5. Ural 1238 Folding 题解

    目录 Ural 1238 Folding 题解 题意 题解 程序 Ural 1238 Folding 题解 题意 定义折叠.展开为: 单个大写英文字母是一个折叠的串,把它展开后是它本身. 如果\(S\ ...

  6. css 颜色自动变化 炫彩

    .layui-icon-login-qq:hover{ color:rgb(0, 156, 255); transition: 0.5s; animation:change 10s linear 0s ...

  7. vue—组件通信,ref

    组件通信: 父组件传递子组件: 把需要的数据 传递给 子组件的数据,以数据绑定(v-bind)的形式,传递到子组件内部,供子组件使用,缩写(:) 动态传递: 第一步:在父组件中的子组件标签中进行动态的 ...

  8. idea 编辑器Git暂存区的使用

    平时在开发时候 一般线上环境和线下环境区别会很大,所以一下线下的自己测试环境的代码没有如果提交会影响线上环境,所以一般都会使用git的一个暂存区作为临时存放不需要提交的代码,这样每次提交代码都可以在不 ...

  9. Linux/CentOS 配置Mysql-server过程和遇到错误解决方法

    第一步:下载mysql-server 方法1.wget url(你所要下载的链接,可以从mysq官网查找)到当前目录下 方法2.到mysql官网下载包之后通过xftp传到linux 第二步:解压tar ...

  10. 【GCN】图卷积网络初探——基于图(Graph)的傅里叶变换和卷积

    [GCN]图卷积网络初探——基于图(Graph)的傅里叶变换和卷积 2018年11月29日 11:50:38 夏至夏至520 阅读数 5980更多 分类专栏: # MachineLearning   ...