使用xlsxwriter从临时文件打开excel输出失败

时间:2014-07-10 09:10:06

标签: python excel temporary-files xlsxwriter

我使用xlsxwriter模块将带有tempfile的xlsx输出创建到临时文件中,我将此临时文件的路径存储在变量中,我稍后在另一个脚本中打开该变量它

问题是有时打开文件失败并显示错误:

"[Errno 2] No such file or directory: '/tmp/xls5TnVsx'" 

抱歉,我对这个问题发生的频率并不确切,但似乎有时会发生这种情况,所以我不明白为什么......

这是我保存到临时文件的方式:

f = tempfile.NamedTemporaryFile(prefix="xls",delete=False)
xlsfilename = f.name  

然后创建xlsx输出:

wb = xlsxwriter.Workbook(filename)
ws = wb.add_worksheet(sheetName)
# Write header
....
# Write data
for row, row_data in enumerate(data, start=1):
    for column, key in enumerate(headers):
        ....
wb.close()
f.close()

然后在Python CGI脚本中,我使用变量xlsxfilename,这是脚本打开它的路径:

print "Content-type: application/msexcel"
print "Content-Disposition: attachment; filename="+xlsfilename
print
try :
    print open(xlsfilename,"rb").read()
finally:
    try:
        xlsfilename.close()
    except:
        pass

os.unlink(xlsfilename)

我在这里做错了什么以及如何通过使用另一种方法存储到临时文件来解决这个问题?

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是你的程序用自己的输出覆盖创建的文件,如

wb = xlsxwriter.Workbook(filename)

语句创建一个新文件。删除thish的条件取决于删除指定的临时文件的时间(技术上这种情况发生在close())。

您应该考虑使用mkstemp,因为您已经明确删除了您正在创建的文件。覆盖该文件,其名称保证唯一且不会自动删除,应该更易控制。