列出具有多个字符串的Excel文件

时间:2019-02-21 07:25:16

标签: python excel dataframe xlwt

我有一个反应列表,我们称它为A

A = ['ABC + B-> C + D','EGF(+)+ F + G-> I + J + K','2000〜XLM + Y-> 2〜Q']

我想编写一个excel文件,其中每个反应物和产物都在不同的单元格中,而化学计量常数在前面。例如

enter image description here

首先,我需要用->和+之类的分隔符分隔字符串,如果反应物前面没有数字,该如何在反应物前面加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中手动编辑代码了。

1 个答案:

答案 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')