使用 xlwt 将列表列表写入 Excel 文件

2023-12-01

我有一个列表,例如:

[
[u'email', u'salutation', u'firstname', u'lastname', u'remarks', None, None, None, None, None],
[u'[email protected]', u'Mr', u'Daniel', u'Radcliffe', u'expecto patronum', None, None, None, None, None],
[u'[email protected]', u'Mr', u'Severus', u'Snape', u'Always', None, None, None, None, None],
]

我想将其插入到 Excel 文件中。可以通过编写每个元素来逐一执行此操作。

book = xlwt.Workbook(encoding="utf-8")
sheet1 = book.add_sheet("Sheet 1")

row = 0
for l in listdata:
    col = 0
    for e in l:
        if e:
          sheet1.write(row, col, e)
        col+=1
    row+=1

但这种方法看起来效率不高,因为必须遍历整个列表的每个元素。有没有更有效的方法在 python 中执行相同的操作xlwt?


EDIT:修复了基准代码中的错误。

你可以稍微缩短一些,让它们更加Pythonic:

for i, l in enumerate(listdata):
    for j, col in enumerate(l):
        sheet.write(i, j, col)

但据我所知,没有像 with 那样简单的方法可以写入csv.reader.


PS:在您提供的代码中,您永远不会增加row or col,因此您覆盖了单元格(0,0)嵌套 for 循环的每次迭代。小心!使用enumerate会解决这个问题。


基准测试

事实证明,join用逗号将每一行放在一起并写入它大约比使用一次枚举快 3 倍。

这是一些测试代码:

import xlwt
import timeit


def wrapper(fn, *args, **kwargs):
    def wrapped():
        return fn(*args, **kwargs)
    return wrapped

def excel_writer():
    xldoc = xlwt.Workbook()
    sheet1 = xldoc.add_sheet("Sheet1", cell_overwrite_ok=True)
    rows = [[str(y) for y in xrange(100)] for x in xrange(10000)]
    fn1 = wrapper(cell_writer, rows, sheet1)
    fn2 = wrapper(row_writer, rows, sheet1)
    print timeit.timeit(fn1, number=10)/10 
    print timeit.timeit(fn2, number=10)/10 
    xldoc.save('myexcel.xls')


def cell_writer(rows, sheet):
    for i, row in enumerate(rows):
        for j, col in enumerate(row):
            sheet.write(i, j, col)

def row_writer(rows, sheet):
    rows = [', '.join(row) for row in rows]
    for i, strrow in enumerate(rows):
        sheet.write(i, 0, strrow)

if __name__ == '__main__':
    excel_writer()

with number = 1(当然除以1):

细胞作家:15.2915050441

行写入器: 0.205128928987

with number = 10:

细胞作家:17.3386430596

行写入器: 0.204951626882

我将巨大的时间差归因于速度的增加join超越写作以求卓越。速度方面最大的瓶颈当然是excel的写入。

但是,请注意,在 Excel 中拆分单元格所需的时间可能超过使用row_writer方法。它还可能给最终用户带来不便;锻炼判断力!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 xlwt 将列表列表写入 Excel 文件 的相关文章

随机推荐