【问题标题】:Open excel output with xlsxwriter from temporary file fail使用 xlsxwriter 从临时文件打开 excel 输出失败
【发布时间】:2014-07-10 09:10:06
【问题描述】:

我正在使用tempfile 模块将带有xlsxwriter 的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)

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

【问题讨论】:

    标签: python excel temporary-files xlsxwriter


    【解决方案1】:

    我认为这里的问题是您的程序正在用自己的输出覆盖创建的文件,因为

    wb = xlsxwriter.Workbook(filename)
    

    语句创建一个新文件。删除该文件的条件取决于指定临时文件何时被删除(技术上这发生在close())。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多