我将.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秒
答案 0 :(得分:2)
openpyxl和xlsxwriter都适合这项任务; xlsxwriter可能只是编写文件最快的,但openpyxl也有write_only
模式用于此类任务,如果你还安装了lxml,这个模式非常快。如果您没有安装lxml,那么您应该会看到相当快的速度。
有几个限制因素:
在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