使用python中openpyxl模块操作excel文件,计算单元格分子式的相对分子质量(二)
2018-02-04 18:26
701 查看
在(一)文中,在最后输出结果时,只是将相对分子质量的值输出,并未将对应的分子式输出,琢磨了一天,将改进的代码贴出来,希望大家可以给出点优化建议!
输出结果为:
等。
应该注意的是,在倒数第四行:
中,应该append(list3[0])。首先append时,应为列表,元组等可迭代的对象;其次,list3本身是一个由列表元素(每个列表元素由两个元素构成,一个是整型的cellMass,另一个是字符串分子式)构成的列表,所以需要访问list3[0]。如果是用append(list3)的话,则会报错:cannot convert [876, 'O24N24C12H12'] to Excel。原因就是list3 = [[876, 'O24N24C12H12']]。
import openpyxl import re def massMr(s):#定义计算相对分子质量的函数, list1 = ['O', 'N', 'C', 'H'] dict1 = {'O':16, 'N':14, 'C':12, 'H':1} a = re.findall('\d+', s) sum = 0 for i in range(4): sum += int(dict1[list1[i]]) * int(a[i]) # print('相对分子质量为:%d'% sum) return sum wb = openpyxl.load_workbook('Molecularformula-max-Mass.xlsx') ws = wb.get_active_sheet() #print(ws) sheet = wb.get_sheet_by_name('Sheet1')#进入表单1 ws1 = wb.create_sheet(index = 1, title = 'Sheet2')#新建表单2 list1 = [] list3 = [] #print(sheet['A1'].value) for i in range(1, int(sheet.max_row) + 1, 2):#对奇数行进行迭代 for j in range(1,int(sheet.max_column) + 1):#对列进行迭代, if sheet.cell(row = i, column = j).value == None:#单元格为空,跳出循环 break else:#单元格不为空,进行计算 cellMass = massMr(str(sheet.cell(row = i, column = j).value)) #dict1 = dict((cellMass, str(sheet.cell(row = i, column = j).value))) #print(dict1) list2 = list1.insert(0,[int(cellMass), str(sheet.cell(row = i, column = j).value)]) cellMass_max = max(list1)#使用max函数取相对分子质量最大的值,注意list1中的元素为列表(由两个元素构成) list4 = list3.append(cellMass_max)#将cellMass_max生成列表 ws1.append(list3[0])#注意append时,参数需为列表,元祖等可迭代对象,此时需用list3[0],因为list3是由列表构成的列表 wb.save('Molecularformula-max-Mass.xlsx')#保存在原文件中, list1 = [] list3 = []
输出结果为:
876 | O24N24C12H12 |
1284 | O35N35C18H18 |
1130 | O28N32C18H18 |
1387 | O33N40C23H23 |
1327 | O31N39C22H21 |
1065 | O24N31C19H19 |
1489 | O36N42C25H25 |
786 | O16N23C16H16 |
744 | O16N20C16H16 |
770 | O20N20C13H14 |
857 | O13N27C21H19 |
986 | O20N29C20H20 |
1860 | O44N54C31H28 |
981 | O23N29C16H15 |
849 | O25N21C12H11 |
1040 | O25N29C18H18 |
应该注意的是,在倒数第四行:
ws1.append(list3[0])
中,应该append(list3[0])。首先append时,应为列表,元组等可迭代的对象;其次,list3本身是一个由列表元素(每个列表元素由两个元素构成,一个是整型的cellMass,另一个是字符串分子式)构成的列表,所以需要访问list3[0]。如果是用append(list3)的话,则会报错:cannot convert [876, 'O24N24C12H12'] to Excel。原因就是list3 = [[876, 'O24N24C12H12']]。
相关文章推荐
- 使用python中openpyxl模块操作excel文件,计算单元格分子式的相对分子质量(一)
- Python使用xlwt模块 操作Excel文件
- Windows下Python使用Pandas模块操作Excel文件的教程
- Windows下Python使用Pandas模块操作Excel文件的教程
- Python学习之使用ctypes模块操作C扩展程序
- python使用xlrd模块读写Excel文件的方法
- Python使用xlrd模块操作Excel数据导入的方法
- Python使用os模块和fileinput模块来操作文件目录
- Python中操作Excel 2000的xlsx文件(使用openpyxl)
- python中使用time模块计算代码执行效率的精度测试(转)
- Python程序中用csv模块来操作csv文件的基本使用教程
- Python使用xlrd模块操作Excel数据导入的方法
- 使用Python(comtypes)操作ArcGis(ArcObject)的第一步:安装模块到gen文件夹中
- python 文件操作 os模块使用
- Python使用os模块和fileinput模块来操作文件目录
- Python 使用xlrd模块操作Excel写
- python使用easy_install安装支持excel2007操作的openpyxl
- Python性能提升一 —— 高计算模块使用C++编写
- python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)
- python使用twisted里log模块操作text记录日志