使用python中openpyxl模块操作excel文件,计算单元格分子式的相对分子质量(二)

在(一)文中,在最后输出结果时,只是将相对分子质量的值输出,并未将对应的分子式输出,琢磨了一天,将改进的代码贴出来,希望大家可以给出点优化建议!

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 = []
输出结果为:

876O24N24C12H12
1284O35N35C18H18
1130O28N32C18H18
1387O33N40C23H23
1327O31N39C22H21
1065O24N31C19H19
1489O36N42C25H25
786O16N23C16H16
744O16N20C16H16
770O20N20C13H14
857O13N27C21H19
986O20N29C20H20
1860O44N54C31H28
981O23N29C16H15
849O25N21C12H11
1040O25N29C18H18

等。


应该注意的是,在倒数第四行:

ws1.append(list3[0])

中,应该append(list3[0])。首先append时,应为列表,元组等可迭代的对象;其次,list3本身是一个由列表元素(每个列表元素由两个元素构成,一个是整型的cellMass,另一个是字符串分子式)构成的列表,所以需要访问list3[0]。如果是用append(list3)的话,则会报错:cannot convert [876, 'O24N24C12H12'] to Excel。原因就是list3 = [[876, 'O24N24C12H12']]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值