使用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的文件。 覆盖该文件,其名称保证是唯一的,哪些不会自动删除,应该是更可控的。