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

我正在用xlsxwriter创build一个xlsx输出到一个临时文件,使用tempfile模块,我将这个临时文件的path存储在一个variables中,我稍后在另一个脚本中使用它来打开它。

问题是,有时打开文件失败,错误:

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

对不起,我没有一个确切的想法发生这个问题的频率,但它似乎不时发生,所以我不明白为什么…

这是我如何保存到一个临时文件:

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

然后创buildxlsx输出:

 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脚本中,我使用variablesxlsxfilename,这是脚本的path来打开它:

 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) 

我在这里做错了什么,如何解决这个问题,也许使用另一种方法来存储到一个临时文件的任何想法?

我相信这里的问题是你的程序正在用自己的输出覆盖创build的文件

 wb = xlsxwriter.Workbook(filename) 

语句创build一个新的文件。 可能删除thish的条件将取决于何时删除指定的临时文件(技术上这发生在close() )。

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