您的位置:首页 > 编程语言 > Python开发

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

2018-02-03 21:53 597 查看
背景:本人是力学专业博士,从事分子动力学模拟,最近需要对结果进行数据分析,其中一项就是计算每一时刻的不同分子式的相对分子质量并将最大相对分子质量输出,换出曲线图。已知,分子式数据均保存在excel文件中,且各分子式均是由O,N,C,H按照顺序排列。如果使用excel计算的话,可能会比较慢,excel文件比较大,有十几兆。刚好最近在自学python,考虑用python中openpyxl模块进行计算。

步骤:

1. 定义计算包含O,N,C,H分子式的相对分子质量

2. 使用openpyxl模块操作excel

3. 将想得到的数据保存在新的表单里

附上代码,请各位大神提出更好的建议,修改成为更简洁的代码。

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('test.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.append(cellMass)
cellMass_max = max(list1)#使用max函数取相对分子质量最大的值
list4 = list3.append(cellMass_max)#将cellMass_max生成列表
ws1.append(list3)#注意append时,参数需为列表,元祖等可迭代对象
list3 = []
wb.save('test.xlsx')#保存在原文件中,
#print(list1, cellMass_max)
list1 = []

最后附上excel文件的部分截图(事先的excel中的数据已经进行简单处理,各单元格均是O,N,C,H四种元素构成,且C原子数大于6):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息