Python 烧瓶用完后将文件取出

Python 烧瓶用完后将文件取出,python,csv,flask,Python,Csv,Flask,我有一个烧瓶视图,它生成数据并将其保存为带有熊猫的CSV文件,然后显示数据。第二个视图为生成的文件提供服务。我想在下载文件后删除它。我的当前代码引发了权限错误,可能是因为在请求后会在文件从\u目录发送之前删除该文件。提供文件后如何删除 def process_data(data) tempname = str(uuid4()) + '.csv' data['text'].to_csv('samo/static/temp/{}'.format(tempname)) retu

我有一个烧瓶视图,它生成数据并将其保存为带有熊猫的CSV文件,然后显示数据。第二个视图为生成的文件提供服务。我想在下载文件后删除它。我的当前代码引发了权限错误,可能是因为在请求后
会在文件从\u目录
发送之前删除该文件。提供文件后如何删除

def process_data(data)
    tempname = str(uuid4()) + '.csv'
    data['text'].to_csv('samo/static/temp/{}'.format(tempname))
    return file

@projects.route('/getcsv/<file>')
def getcsv(file):
    @after_this_request
    def cleanup(response):
        os.remove('samo/static/temp/' + file)
        return response

    return send_from_directory(directory=cwd + '/samo/static/temp/', filename=file, as_attachment=True)
def过程数据(数据)
tempname=str(uuid4())+'.csv'
数据['text']到_csv('samo/static/temp/{}'。格式(tempname))
返回文件
@projects.route(“/getcsv/”)
def getcsv(文件):
@在这个请求之后
def清理(响应):
删除('samo/static/temp/'+文件)
返回响应
从_目录返回发送_(directory=cwd+'/samo/static/temp/',filename=file,as_attachment=True)

在返回视图后但在发送响应之前运行请求。发送文件可以使用流式响应;如果在完全读取之前将其删除,则可能会出错

这在Windows上主要是一个问题,其他平台可以将文件标记为已删除,并将其保留到无法访问为止。但是,在确定文件已发送后,无论平台如何,仅删除该文件可能仍然有用

将文件读入内存并提供,这样以后删除时就不会读取它了。如果文件太大,无法读入内存,请使用生成器为其提供服务,然后将其删除

@app.route('/download_and_remove/<filename>')
def download_and_remove(filename):
    path = os.path.join(current_app.instance_path, filename)

    def generate():
        with open(path) as f:
            yield from f

        os.remove(path)

    r = current_app.response_class(generate(), mimetype='text/csv')
    r.headers.set('Content-Disposition', 'attachment', filename='data.csv')
    return r
@app.route('/download\u and\u remove/'))
def下载和删除(文件名):
path=os.path.join(当前的应用程序实例路径,文件名)
def generate():
打开(路径)作为f:
f的产量
删除操作系统(路径)
r=当前应用程序响应类(generate(),mimetype='text/csv')
r、 headers.set('Content-Disposition','attachment',filename='data.csv')
返回r