python - 使用 xlwt 将列表列表写入 excel 文件

标签 python excel xlwt

我有一个列表列表,例如:

[
[u'email', u'salutation', u'firstname', u'lastname', u'remarks', None, None, None, None, None],
[u'harry@harrypotter.com', u'Mr', u'Daniel', u'Radcliffe', u'expecto patronum', None, None, None, None, None],
[u'snape@harrypotter.com', 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 做同样的事情?

最佳答案

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

您可以稍微缩短一些内容,使它们更具 Python 风格:

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

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


PS:在您提供的代码中,您从不递增 rowcol,因此您每次都覆盖 (0,0) 处的单元格嵌套 for 循环的迭代。小心!使用 enumerate 将解决这个问题。


基准

事实证明,用逗号连接每一行并写入它比使用 enumerate once 快大约 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()

number = 1(当然除以 1):

cell_writer: 15.2915050441

row_writer: 0.205128928987

number = 10:

cell_writer: 17.3386430596

row_writer: 0.204951626882

我将大的时间差异归因于 join 的速度比写入 excel 的速度更快。速度方面最大的瓶颈,当然是excel的写法了。

但是,请注意,在 excel 中拆分单元格所花费的时间可能超过使用 row_writer 方法节省的时间。这也可能给最终用户带来不便;锻炼判断力!

关于python - 使用 xlwt 将列表列表写入 excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307848/

相关文章:

python - Python 中的天花板日期(类似于 R 的天花板日期)

python - 将excel转换为csv后无法读取head

python - 如何使用 python xlwt 库更改 excel 单元格的背景颜色?

python - 每次 python 脚本运行时更改 Excel 工作表

python - 在 Python 中使用 XLWT 在 Excel 中追加行

python - 将 2d 转换为 3d 数组后保存图像问题

python - 在Django中创建对象时将当前登录的用户设置为模型中的用户

python - 尝试在本地网站上使用 python 请求时出现 503 响应

excel - 如何与其他人一起度过一段时间

excel - VBA 自动执行网页抓取进入单元格