从.h5文件写入excel:性能

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

我正在使用openpyxl。 而且,我可能不会以一种好的方式来做,但似乎是花费太多的时间来处理(相当)小的.h5文件。

你有什么build议?

我目前正在看看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行×17列的pyTable,需要152.976000071秒

openpyxl和xlsxwriter都适合这个任务; xlsxwriter可能是最快的只是写文件,但openpyxl也有这种任务的write_only模式,这是非常快的,如果你还安装了lxml。 如果你没有安装lxml,那么你应该看到一个相当大的加速。

有几个限制因素:

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

在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中定义一个数据源,这也许可以让您按照自己想要的方式select列。

您可以简单地写入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(或Pandas,如果你想要更多的选项)编写整个CSV文件,而不需要任何缓慢的Python循环。

你也可以考虑pandas的to_excel方法: http : to_excel