import collections
class headhandler():def __init__(self,mylist):self.mystorage={}self.mylist = mylistdef delempty(self):'''去除重复:return:'''while "" in self.mylist:self.mylist.remove("")def formatmydata(self,i):try:i=i.replace(":","")except Exception:i=ireturn idef 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.mystoragedef finalchart(self):self.delempty()self.mylist = list(map(self.formatmydata,self.mylist))#print(self.mylist)finalchart = self.turntodict()#print(finalchart)return finalchartclass 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.mylistdef 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.columnlinedef 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)passreturn allretsdef mergerows(mylist):splitline = 0doc = {}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]=='':passmylist1=['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长', '锄头马', '铁重量', '铜含量', '铝含量', '片含量', 

'无限长', '锄头马', '铁含量', '铜价格', '铝价格', '片价格', '无限长', '锄头马', '铁价格', '产值', '每吨毛利', '货品赢利']
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}

转载于:https://www.cnblogs.com/saintdingspage/p/11368194.html

python一些方便excel行操作的函数(一)相关推荐

  1. python自动化之excel文件操作

    excel文件操作 首先为什么要讲excel文件操作呢,因为一般用到的自动化框架中大部分都是用excel存放测试用例数据,是数据驱动的来源. 一.安装 本次分享的是通过openpyxl 这个模块来操作 ...

  2. 干货-运行Python脚本的命令行操作(2)

    本文用到的数据,可以加QQ跟群主获取: 群名称:PYTHONERS-数据 群   号:663468799 学习python和数据分析推荐地方: www.lynda.com   获取lynda官网会员的 ...

  3. python pandas实现excel中的if 函数(一)

    excel中,if函数的使用非常普遍.如果通过pandas可以有好几种方法,核心还是通过if语句实现.下面我来阐述一下: >>> df = pd.read_excel(r'D:/my ...

  4. python xlrd获取excel行数_python xlrd 模块(获取Excel表中数据)

    一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 二.使用介绍 1.常用单元格中的数据类型 0 ...

  5. 【Python开发】Excel的操作之——读取

    主要思路参考这篇博客的内容,把地址贴上: http://www.cnblogs.com/zhoujie/p/python18.html 下面贴上我自己的代码 读取excel数据的demo代码如下: 1 ...

  6. python中文件的相关操作和函数

    文件操作 fp = open("文件名",mode="模式",encoding="utf-8") fp -> 文件的io对象 (文件句 ...

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

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

  8. 命令行操作之函数绘图(MATLAB基础)

    吴恩达机器学习第五章笔记 x=[0:0.01:0.98] %生成0到0.98范围的一组数,间隔0.01 y=sin(2*pi*x) plot(x,y) %生成x为横轴,y为纵轴的图 hold on % ...

  9. python能实现excel什么功能_Python pandas对excel的操作实现示例

    最近经常看到各平台里都有Python的广告,都是对excel的操作,这里明哥收集整理了一下pandas对excel的操作方法和使用过程.本篇介绍 pandas 的 DataFrame 对列 (Colu ...

最新文章

  1. 如何制作linux文件系统,linux文件系统制作(一)
  2. 用命令行管理你的GitHub项目,不必再开网页,官方CLI工具1.0版今日上线
  3. pinctrl虚拟spi的linux驱动,LinuxSPI驱动.md
  4. WEB应用之网页数据分析工具
  5. Codeforces D. Fair 多源BFS求最短路
  6. 去掉 Android工程中让人很不爽的“黄色警告”
  7. 1.使用C++封装一个链表类LinkList
  8. 关于ionic的一些坑(3)
  9. 高通写号工具_高通推出桌面平台新ARM处理器并认为我们的电脑性能没必要那么高...
  10. 苹果回应移除部分屏幕时间控制应用:因为隐私和安全
  11. 第一个自动化运维程序
  12. Etcd超全解:原理阐释及部署设置的最佳实践
  13. dss linux 摄像头 rtsp,[转载]DSS Linux 安装
  14. 天刀服务器未响应,天涯明月刀卡顿怎么办 教你如何优化游戏不在卡顿
  15. 共享文件问题 -- 无法访问 您可能没有权限使用网络资源
  16. 网格边缘试探--服务网格的探索与实践
  17. python语言中、复数类型中实数部分_python学习03.02:Python数值类型(整形、浮点型和复数)及其用法...
  18. python初学-爬取网页数据
  19. 前端接收java验证码_在Web项目中手机短信验证码实现的全过程记录
  20. 人生没有太晚的开始,只有不开始

热门文章

  1. uwp连接mysql数据库_在 UWP 应用中使用 SQLite 数据库
  2. java xml转map_java练习本(原每日一练)(20190514)
  3. wordpress去掉自带的logo或者左侧栏的菜单方法
  4. CC254x--OSAL
  5. Gulp在前端的常用操作实例
  6. Linux多线程编程实例解析
  7. Python爬虫入门三urllib库基本使用
  8. socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF
  9. React开发(189):ant design textarea允许清除allowClear
  10. 19什么情况下会帮助他人