我有一个反应列表,我们称之为A.
A = ['ABC + B-> C + D','EGF(+)+ F + G-> I + J + K','2000~XLM + Y-> 2~Q']
我想写一个excel文件,其中每个反应物和产品都在不同的单元格中,而前面有化学计量常数。例如
首先,我需要通过分隔符来分隔字符串,例如 - >和+,如果前面没有数字,如何在反应物前添加1?用pandas或xlwt编写是否更好?
谢谢你的帮助!
import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet('Test')
new_list= []
for j in reaction:
j = j.split ('--->')
new_list.append(j)
for j in new_list:
for i in range(1, 180):
ws.write(i,0, j[0:i])
ws.write(i,1, j[i:2])
我知道它很难,因为元素中有(+)不能分开。我想也许可以将每个东西转换为自己的字符串,只是找到我们想要的分隔符并将它们分开?我再次编辑代码,它给了我想要的东西,但它说它覆盖相同的单元格,我不知道为什么,导致迭代通过1,180和列表中的字符串???如果我让这个循环工作,我会足够接近在手动编辑excel中的代码。
编辑我的答案......希望这有帮助
import re
import xlwt
def write_data(row,col,data,sheet):
#groups = data.split('+')
groups = re.split(r"\+(?!\))",data) #split on '+', but dont split if the + is followed by a ')' like in (+)
for g in groups:
digits_match = re.match(r'[0-9]+',g)
if digits_match is None: #doesnt start with a digit
digit = 1
index = 0
else:
digit = digits_match.group() #take all digits
index = len(digit)
sheet.write(row,col,int(digit))
col+=1
sheet.write(row,col,g[index:])
col+=1
return col
book = xlwt.Workbook()
sheet = book.add_sheet('reactions')
row = 0
A = ['A+B--->4C+D', 'E(+)+F+3G--->I+J+KLM', 'X+Y--->2~Q', 'ABC+B--->C+D', '4EGF(+)+F+G--->I+J+K', '2000~XLM+Y--->2~Q']
for reaction in A:
reaction = reaction.replace('~','') # assuming u dont need this character
#add any other chars here if reqd...#
col = 0
splits = reaction.split('--->')
col = write_data(row,col,splits[0],sheet)
sheet.write(row,col,'--->')
col += 1
col = write_data(row,col,splits[1],sheet)
row += 1
book.save('temp1.xls')