从.h5文件中写excel:性能

时间:2014-10-22 07:48:18

标签: python excel openpyxl

我将.h5文件中的一些数据保存到excel文件中。

我正在使用openpyxl。并且,我可能不会以一种好的方式做到这一点但是,似乎花费了太多时间来制作一个(相当)小的.h5文件。

你有什么建议吗?

我目前正在研究XlsxWriter,但这真的很棒吗?。

以下是我正在使用的简单代码:

from openpyxl import Workbook
from tables import *
import os
import time

def saveExcel(pyTableName):

    t1 = time.time()

    wb_write = Workbook()
    wsh_write = wb_write.active

    r = 2
    with openFile(pyTableName, 'r') as f:
        tab = f.getNode('/absoluteData')
        for row in tab.iterrows():
            wsh_write.cell(row=r, column=1).value = row['sheet']
            wsh_write.cell(row=r, column=2).value = str(row['IDnum'])+','+str(row['name'])
            wsh_write.cell(row=r, column=3).value = row['line'])
            wsh_write.cell(row=r, column=4).value = row['is_1']
            wsh_write.cell(row=r, column=5).value = row['is_0']
            wsh_write.cell(row=r, column=6).value = row['is_unknown']
            wsh_write.cell(row=r, column=7).value = row['is_ok']
            r+=1

        wb_write.save(os.path.join(os.getcwd(),'Results.xlsx'))
        print "SAVED in: ", time.time() - t1

运行此代码后的一些性能数据:

对于具有235200行x 17列的pyTable,它需要152.976000071秒

2 个答案:

答案 0 :(得分:2)

openpyxl和xlsxwriter都适合这项任务; xlsxwriter可能只是编写文件最快的,但openpyxl也有write_only模式用于此类任务,如果你还安装了lxml,这个模式非常快。如果您没有安装lxml,那么您应该会看到相当快的速度。

有几个限制因素:

  • 从源对象转换为Python到XML(在这种情况下可能是h5,numpy,Python和XML)
  • xlsx不支持流式传输
  • 的事实

在openpyxl中,我们尝试简化API,以便您可以简单地将行附加到单元格而不必过多担心坐标。

您修改的代码可能如下所示:

wb = Workbook(write_only=True)
ws = wb.create_sheet("Sheet1")
for row in tab.iterrows():
   ws.append({'A':'row['sheet'], 'B': '%s%s' %(row['IDnum'], r(row['name'])}

如果您确实希望遵循CSV路线,那么最好使用h5dump并在Excel中定义数据源,这也可能允许您按照自己的方式选择列。

答案 1 :(得分:1)

您可以简单地写入CSV并将其加载到Excel中。这是粗略的代码:

with openFile(pyTableName, 'r') as f:
    tab = f.getNode('/absoluteData')
    outpath = os.path.join(os.getcwd(),'Results.csv')
    np.savetxt(outpath, tab, delimiter=',')

也就是说,您应该能够使用NumPy编写整个CSV(如果您想要更高级的选项,可以使用Pandas),而不需要任何缓慢的Python循环。

你也可以考虑熊猫' to_excel方法:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html