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. CentOS 7系统KVM虚拟机安装过程详解

    什么是 KVM ? KVM 在标准的 Linux 内核中增加了虚拟技术,从而我们可以通过优化的内核来使用虚拟技术.在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以 ...

  2. Java包的基本概述

    第七章 7.1 包的基本概述 起因: 在我们设计一个程序的时候(尤其是多人合作),会写一些类来实现功能,但是往往会有重名的现象发生,为了解决这个问题,则专门设计了包.(还有其他作用,下述) 简单理解: ...

  3. 处理vue页面406问题纪要

    1.servlet-mapping url-pattern / 与 /* 的区别注意关注 2.mvc:resource 是否生效,注意关注,如不生效,可在 web.xml中配置<servlet- ...

  4. SQL优化记录

    2019.06.19记录: 1.SQL优化的原因: 原因:性能低,执行时间太长,等待时间太长,SQL语句欠佳(尤其连接查询),索引失效,服务器参数设置的不合理(如:缓冲区,线程等) a.SQL: 编写 ...

  5. 第二讲,NT头文件格式,以及文件头格式

    今天详解NT 头格式,以及文件头格式,以及作用, 关于DOS头文件格式,以及DOSStub昨天的博客已经写过了.主要是分散讲解.便于理解. 一丶最小PE的生成,以及标准PE的生成 ps: (如果直接学 ...

  6. 在javascript对象内搜索,貌似是一个新鲜的话题。

    为啥 也不为啥,因为没找到. 用途 也没啥用途,比如,在电影网站找到链接,在小说网站找到链接.二货同事写的复杂对象.等等吧.反正要搜索就对了. 目标 在对象内,无论多少层,找到关键字. 关键字可能的位 ...

  7. Faster RCNN学习笔记

    感谢知乎大神的分享 https://zhuanlan.zhihu.com/p/31426458 Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster R ...

  8. uni-app中picker组件的一个坑

    这里直接贴出代码 <view class="goods-info-add fl-sw"> <view>运费模板:</view> <view ...

  9. DSN 建立达梦7(DM)连接

    (DSN)Data Source Name 数据源名称 “ODBC数据源管理器”提供了三种DSN,分别为用户DSN.系统DSN和文件DSN.其中:      用户DSN会把相应的配置信息保存在Wind ...

  10. 处理python错误问题

    ------------恢复内容开始------------ 调试过程中遇到的问题 (1)爬取首页源码出现中文乱码 解决方案: 将网页编码强制转换成gbk,并去除解决乱码问题的三行代码. (2)程序运 ...