我有一个反应列表,我们称它为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中手动编辑代码了。
答案 0 :(得分:0)
编辑我的答案...希望有帮助
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')