1. import collections
  2. class headhandler():
  3. def __init__(self,mylist):
  4. self.mystorage={}
  5. self.mylist = mylist
  6. def delempty(self):
  7. '''
  8. 去除重复
  9. :return:
  10. '''
  11. while "" in self.mylist:
  12. self.mylist.remove("")
  13. def formatmydata(self,i):
  14. try:
  15. i=i.replace(":","")
  16. except Exception:
  17. i=i
  18. return i
  19. def fillempty(self):
  20. '''
  21. 只用于处理表头信息
  22. :return:
  23. '''
  24. # 对于不规则列表的处理办法,如果元素的下一个元素仍是字符串类型,或者不存在
  25. # 就插入或者用0填充
  26. self.delempty()
  27. for i in self.mylist:
  28. myindex = self.mylist.index(i)
  29. if myindex == 0 or (myindex % 2 == 0):
  30. try:
  31. nextelement = self.mylist[myindex + 1]
  32. if isinstance(self.mylist[myindex + 1], str):
  33. self.mylist.insert(myindex + 1, 0)
  34. except IndexError:
  35. self.mylist.append(0)
  36. self.mylist =list(map(self.formatmydata,self.mylist))
  37. print(self.mylist)
  38. def turntodict(self):
  39. self.fillempty()
  40. for i in self.mylist[::2]:
  41. self.mystorage[i] =self.mylist[self.mylist.index(i)+1]
  42. return self.mystorage
  43. def finalchart(self):
  44. self.delempty()
  45. self.mylist = list(map(self.formatmydata,self.mylist))
  46. #print(self.mylist)
  47. finalchart = self.turntodict()
  48. #print(finalchart)
  49. return finalchart
  50.  
  51. class rowhandler(headhandler):
  52. def __init__(self,mylist):
  53. super(rowhandler,self).__init__(mylist)
  54. def fillempty(self):
  55. self.delempty()
  56. staticdict={}
  57. for myindex,myelement in enumerate(self.mylist):
  58. if myelement in staticdict:
  59. staticdict[myelement].append(myindex)
  60. else:
  61. staticdict[myelement]=[]
  62. staticdict[myelement].append(myindex)
  63. for i in list(staticdict.keys()):
  64. if len(staticdict[i])==1:
  65. del staticdict[i]
  66. else:
  67. self.mylist[staticdict[i][0]] =self.mylist[staticdict[i][0]]+'重量'
  68. self.mylist[staticdict[i][1]] = self.mylist[staticdict[i][1]] + '含量'
  69. self.mylist[staticdict[i][2]] = self.mylist[staticdict[i][2]] + '价格'
  70. return self.mylist
  71. def turntodict(self):
  72. self.fillempty()
  73. for i in self.mylist[::2]:
  74. self.mystorage[i] =self.mylist[self.mylist.index(i)+1]
  75. return self.mystorage
  76. #mylist = ['采购日期:', '', 43495.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '索赔金额:', '', '', '', '', '', 0.0, '', '']
  77.  
  78. mydict= {'a':[1,2],'b':[2,3,4]}
  79. for i in list(mydict.keys()):
  80. print(mydict[i])
  81. if len(mydict[i])>2:
  82. del mydict[i]
  83. print(mydict)
  84. #print(wenwa.index('每吨人工:'))

输出结果:

  1. [1, 2]
  2. [2, 3, 4]
  3. {'a': [1, 2]}
  1. from anewclass import *
  2. class docgen:
  3. def __init__(self,mylist):
  4. self.mxrows = mylist[1::]
  5. self.columnline = mylist[0]
  6. self.addlist=[]#用于承载非规则行信息
  7. self.mxlist = []
  8.  
  9. def addstring(self):
  10. mycounter = dict(collections.Counter(self.columnline))
  11. keypos = []
  12. finalist = []
  13. for i in mycounter.keys():
  14. if mycounter[i] > 1:
  15. for myindex, myelements in enumerate(self.columnline):
  16. if myelements == i:
  17. keypos.append(myindex)
  18. if myindex == len(self.columnline) - 1:
  19. finalist.append(keypos)
  20. keypos = []
  21. for i in finalist:
  22. self.columnline[i[0]] = self.columnline[i[0]] + "重量"
  23. self.columnline[i[1]] = self.columnline[i[1]] + "含量"
  24. self.columnline[i[2]] = self.columnline[i[2]] + "价格"
  25. return self.columnline
  26.  
  27. def genmx(self):
  28. self.addstring()
  29. for i in self.mxrows:
  30. if i[0]=="":
  31. myhandler = rowhandler(i)
  32. self.addlist.append(myhandler.turntodict())
  33. else:
  34. myrow = rowhandler(self.columnline)
  35. self.columnline = myrow.fillempty()
  36. self.mxlist.append(dict(zip(self.columnline,i)))
  37. def returnall(self):
  38. self.genmx()
  39. return {'mx':self.mxlist,'others':self.addlist}
  40.  
  41. wuwa =[
  42. ['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长', '锄头马', '铁重量', '铜含量', '铝含量', '片含量', '无限长',
    '锄头马', '铁含量', '铜价格', '铝价格', '片价格', '无限长', '锄头马', '铁价格', '产值', '每吨毛利', '货品赢利'],
  43. ['铜芯', 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],
  44. ['', '', '', '', '', '', '23尖角', 1.157, '35尖角', 1.766, '', '', '23尖角', 0.058979456593770706, '35尖角', 0.09002395881123515, '', '',
  45.  
  46. '23尖角', 5000.0, '35尖角', 3500.0, '', '', '', ''],
  47. ['', '', '', '', '', '', '35平角', 1.073, '', '', '', '', '35平角', 0.05469745628791354, '', '', '', '', '35平角', 3000.0, '', '', '', '',
    '', '']
  48. ]
  49.  
  50. saiwa = docgen(wuwa)
  51. print("===============mx===================")
  52. for i in saiwa.returnall()['mx']:
  53. print(i)
  54. print("===============others===================")
  55.  
  56. for i in saiwa.returnall()['others']:
  57. print(i)

输出结果:

  1. [1, 2]
  2. [2, 3, 4]
  3. {'a': [1, 2]}
  4. ===============mx===================
  5. {'品名': '铜芯', '采购价': 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}
  6. ===============others===================
  7. {'23尖角重量': 1.157, '35尖角重量': 1.766, '23尖角含量': 0.058979456593770706, '35尖角含量': 0.09002395881123515, '23尖角价格': 5000.0,
  8.  
  9. '35尖角价格': 3500.0}
  10. {'35平角重量': 1.073, '35平角含量': 0.05469745628791354, '35平角价格': 3000.0}
  1. def readexcel(path):
  2. datablock = pd.read_excel(path,sheet_name=0)
  3. print(len(datablock))
  4. wenwa = datablock.head(2)
  5. print(type(wenwa.index))
  6. print(datablock.index.__dict__)
  7. print("columns",datablock.columns[0])
  8. print("columns",datablock.head(2).columns)
  9.  
  10. def loadexcel(path):
  11. mysheet = xlrd.open_workbook(path)
  12. mybook = mysheet.sheet_by_index(0)
  13. #print(mybook.row_values(0))
  14. colnamelist = mybook.row_values(2)
  15. row3 = mybook.row_values(3)
  16. #print(dict(zip(colnamelist,row3)))
  17. allrets = []
  18. for i in range(mybook.nrows):
  19. #print(mybook.row_values(i))
  20. allrets.append(mybook.row_values(i))
  21. print(mybook.nrows)
  22. for i in allrets:
  23. #print(i)
  24. pass
  25. return allrets
  26.  
  27. def mergerows(mylist):
  28. splitline = 0
  29. doc = {}
  30. for i in mylist:
  31. print(i)
  32. k='每吨人工:'
  33. if k in i:
  34. print('in: ',mylist.index(i))
  35. splitline = mylist.index(i)
  36. doc["mx"] = mylist[2:splitline-1]
  37. doc["header"] = mylist[splitline:]
  38. return doc
  39. duwa = loadexcel('火烧片 2. MSCU3272441 铜芯.csv')
  40. doc = mergerows(duwa)
  41. for i in doc['header']:
  42. print(i)
  43.  
  44. print("==================mx=============================")
  45. for i in doc['mx']:
  46. print(i)
  47.  
  48. def dealmx(mylist):
  49. if mylist[0]=='':
  50. pass
  51.  
  52. mylist1=['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长', '锄头马', '铁重量', '铜含量', '铝含量', '片含量',
  53.  
  54. '无限长', '锄头马', '铁含量', '铜价格', '铝价格', '片价格', '无限长', '锄头马', '铁价格', '产值', '每吨毛利', '货品赢利']
  55. 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]
  56.  
  57. print(dict(zip(mylist1,mylist2)))
  58. print(collections.Counter(mylist1))
  59. print(mylist1.index('无限长'))
  60.  
  61. def addstring(mylist):
  62. mycounter = collections.Counter(mylist)
  63. keypos=[]
  64. finalist=[]
  65. for i in mycounter.keys():
  66. if mycounter[i]>1:
  67. for myindex,myelements in enumerate(mylist):
  68. if myelements==i:
  69. keypos.append(myindex)
  70. if myindex==len(mylist)-1:
  71. finalist.append(keypos)
  72. keypos = []
  73. for i in finalist:
  74. mylist[i[0]]=mylist[i[0]]+"重量"
  75. mylist[i[1]]=mylist[i[1]]+"含量"
  76. mylist[i[2]] = mylist[i[2]] + "价格"
  77. return mylist
  78. print(addstring(mylist1))
  79.  
  80. mycounter = collections.Counter(mylist1)
  81. print(dict(mycounter))

输出结果:

  1. 12
  2. ['火烧片', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
  3. ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
  4. ['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长', '锄头马', '铁重量', '铜含量', '铝含量', '片含量', '无限长',
    '锄头马', '铁含量', '铜价格', '铝价格', '片价格', '无限长', '锄头马', '铁价格', '产值', '每吨毛利', '货品赢利']
  5. ['铜芯', 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]
  6. ['', '', '', '', '', '', '23尖角', 1.157, '35尖角', 1.766, '', '', '23尖角', 0.058979456593770706, '35尖角', 0.09002395881123515, '', '',
    '23尖角', 5000.0, '35尖角', 3500.0, '', '', '', '']
  7. ['', '', '', '', '', '', '35平角', 1.073, '', '', '', '', '35平角', 0.05469745628791354, '', '', '', '', '35平角', 3000.0, '', '', '', '', '',
    '']
  8. ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
  9. ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '每吨人工:', '', '', '', '', '总人工', 0.0, '', '']
  10. in: 7
  11. ['采购日期:', '', 43495.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '索赔金额:', '', '', '', '', '', 0.0, '', '']
  12. ['计算日期:', '', 43594.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '总成本:', '', '', '', '', '', 234540.852, '', '']
  13. ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '总利润:', '', '', '', '', '', -3224.051999999979, '', '']
  14. ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '利润百分比:', '', '', '', '', '', -0.013746227885281063, '', '']
  15. ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '每吨人工:', '', '', '', '', '总人工', 0.0, '', '']
  16. ['采购日期:', '', 43495.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '索赔金额:', '', '', '', '', '', 0.0, '', '']
  17. ['计算日期:', '', 43594.0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '总成本:', '', '', '', '', '', 234540.852, '', '']
  18. ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '总利润:', '', '', '', '', '', -3224.051999999979, '', '']
  19. ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '利润百分比:', '', '', '', '', '', -0.013746227885281063, '', '']
  20. ==================mx=============================
  21. ['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长', '锄头马', '铁重量', '铜含量', '铝含量', '片含量', '无限长',
  22.  
  23. '锄头马', '铁含量', '铜价格', '铝价格', '片价格', '无限长', '锄头马', '铁价格', '产值', '每吨毛利', '货品赢利']
  24. ['铜芯', 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]
  25. ['', '', '', '', '', '', '23尖角', 1.157, '35尖角', 1.766, '', '', '23尖角', 0.058979456593770706, '35尖角', 0.09002395881123515, '', '',
    '23尖角', 5000.0, '35尖角', 3500.0, '', '', '', '']
  26. ['', '', '', '', '', '', '35平角', 1.073, '', '', '', '', '35平角', 0.05469745628791354, '', '', '', '', '35平角', 3000.0, '', '', '', '', '',
    '']
  27. {'品名': '铜芯', '采购价': 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}
  28. Counter({'无限长': 3, '锄头马': 3, '品名': 1, '采购价': 1, '每吨成本': 1, '重量': 1, '货品总成本': 1, '铜重量': 1, '铝重量': 1, '片重量': 1,
    '铁重量': 1, '铜含量': 1, '铝含量': 1, '片含量': 1, '铁含量': 1, '铜价格': 1, '铝价格': 1, '片价格': 1, '铁价格': 1, '产值': 1, '每吨毛利': 1,
    '货品赢利': 1})
  29. 8
  30. ['品名', '采购价', '每吨成本', '重量', '货品总成本', '铜重量', '铝重量', '片重量', '无限长重量', '锄头马重量', '铁重量', '铜含量', '铝含量', '片含量',
    '无限长含量', '锄头马含量', '铁含量', '铜价格', '铝价格', '片价格', '无限长价格', '锄头马价格', '铁价格', '产值', '每吨毛利', '货品赢利']
  31. {'品名': 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. Java总复习内容

    StringBuffer定义时需要用正确的方式 例如: StringBuffer xxx = new StringBuffer("雯雯是猪"); 使用StringBuffer的连接 ...

  2. confluence导出PDF格式文件不显示中文解决

    由于confluence导出PDF格式文件需要应用字体文件,下载字体文件在confluence管理员界面安装即可. 我这里使用从simhei.ttf楷体,可以从windowns主机里下载(c:/win ...

  3. Android Monkey压测命令

    测试步骤:1.安装ADB2.连接被测手机和电脑3.打开CMD命令行4.输入monkey命令adb shell monkey -p your.package.name --pct-touch 30 -- ...

  4. 14.shell脚本学习

    简单的执行跟踪,会使得Shell显示每个被执行到的命令sh -x delete.sh 查找与替换grepsed -i "s/t_rs_customer/t_rs_customer_bak/g ...

  5. Python http.server中获取Post的请求报文

    今天在自学http.server请求命令, 各个字段都很好理解, 但唯独想打印获取Post请求报文时, 被难住了, 网上找了很多帖子, 官方的文档也刷了几遍, 但没有一个明确的答复. 后来不经意间看到 ...

  6. Idea 快捷生成方法(待完善)

    1.System.out.println() 输入sout,按下enter键,生成System.out.println()方法. sout--->soutv=System.out.println ...

  7. spring-boot-plus集成Shiro+JWT权限管理

    SpringBoot+Shiro+JWT权限管理 Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 使用Shiro的易于理解的API,您可以 ...

  8. css加载没效果,查看网络显示类型为 text/plain 的解决方法

    当请求的css 文件的MIME 类型 为 text/plain 时,文件会当做 .txt 文件来处理,浏览器就会拒绝渲染 产生这样的问题和服务器的配置有关系 在服务器上加上下面两句就好了 搞定

  9. 利用浏览器做好数字进制和ASCII码及Unicode教与学

    浏览器是现在个人计算机的标配,一般来说一个PC至少安装一种以上的浏览器.主流网页浏览器有Google Chrome.Internet Explorer.Microsoft Edge.Mozilla F ...

  10. 使用 function 构造函数创建组件和使用 class 关键字创建组件

    使用 function 构造函数创建组件: 如果想要把组件放到页面中,可以把构造函数的名称,当作 组件的名称,以 HTML标签形式引入页面中, 因为在React中,构造函数就是一个最基本的组件. 注意 ...