使用python中openpyxl模組操作excel檔案,計算單元格分子式的相對分子質量(二)
阿新 • • 發佈:2019-02-05
在(一)文中,在最後輸出結果時,只是將相對分子質量的值輸出,並未將對應的分子式輸出,琢磨了一天,將改進的程式碼貼出來,希望大家可以給出點優化建議!
輸出結果為: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 |
等。
應該注意的是,在倒數第四行:
中,應該append(list3[0])。首先append時,應為列表,元組等可迭代的物件;其次,list3本身是一個由列表元素(每個列表元素由兩個元素構成,一個是整型的cellMass,另一個是字串分子式)構成的列表,所以需要訪問list3[0]。如果是用append(list3)的話,則會報錯:cannot convert [876, 'O24N24C12H12'] to Excel。原因就是list3 = [[876, 'O24N24C12H12']]。ws1.append(list3[0])