用逗号逗号分隔字符串以使用excel单元格

时间:2020-02-06 05:49:58

标签: python excel openpyxl xlsxwriter xlwt

我想将内容从字符串推送到xls 内容是

ipairs + ipairsCompatable
1       AAA
2       BBB
3       CCC

ipairs + ipairsCompatable2
1       DDD
2       EEE
3       FFF

ipairs + ipairsCompatable3
1       this
2       does
3       work

ipairs + notIpairsCompatable

pairs + notIpairsCompatable
2       this
3       does
4       not

ipairs + notIpairsCompatable2

pairs + notIpairsCompatable2
2       this
5       doesnt
24      either

ipairs + kindofIpairsCompatable
1       1
2       2
3       3

pairs + kindofIpairsCompatable
1       1
2       2
3       3
5       5
cool    bro

这是我的示例代码(使用xlwt)

abc,[1,2],abc/er/t_y,def,[3,4],def/er/t_d,ghi,ghi/tr/t_p,jkl,[5],jkl/tr/t_m_n,nop,nop/tr/t_k

在excel中提取数据时,要遵循的规则很少

workbook = xlwt.Workbook()
sh = workbook.add_sheet("Sheet1")
def exporttoexcel ():  
    print("I am in print excel")
    rowCount = 1
    for row in finalvalue:  # in finalvalue abc,[1,2],abc/er/ty.. is stored as type= str
        colCount = 0
        for column in row.split(","):  
            sh.write(rowCount, colCount, column)
            colCount += 1
        rowCount += 1
    workbook.save("myxl.xls")

exporttoexcel()

如何将数据推入与上述规则相似的excel中?

- column headers are main,ids,UI
- each cell have one value except ids [ids may or may not be there]
- after three columns it should move to the next row
- the second column i.e **id** should have only ids and if not available it should be kept as blank

2 个答案:

答案 0 :(得分:0)

使用正则表达式检查带有[]的值

import re
m = re.search(r"\[(\w+)\]", column)

答案 1 :(得分:0)

如果您的问题是如何将输入字符串分解为可以用您的代码处理的内容:

import re

content = 'abc,[1,2],abc/er/ty,def,[3,4],def/er/td,ghi,ghi/tr/tp,jkl,[5],jkl/tr/tm,nop,nop/tr/tk'

finalvalue = []
for match in re.finditer(r"(\w+),(\[\d+(?:,\d+)*\],)?([\w/]+)", content):
    finalvalue.append((
        match.group(1),
        None if match.group(2) is None else match.group(2)[1:-2],
        match.group(3)
    ))

print(finalvalue)

结果:

[('abc', '1,2', 'abc/er/ty'), ('def', '3,4', 'def/er/td'), ('ghi', None, 'ghi/tr/tp'), ('jkl', '5', 'jkl/tr/tm'), ('nop', None, 'nop/tr/tk')]

注意:行不再存储为字符串,而是存储为元组,因此您只需简单地编写一下代码即可。