列出多个字符串以excel文件

问题描述 投票:0回答:1

我有一个反应列表,我们称之为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中的代码。

python excel dataframe xlwt
1个回答
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')
© www.soinside.com 2019 - 2024. All rights reserved.