Python Flask发送_文件StringIO空白文件
我使用的是python 3.5和flask 0.10.1,我很喜欢,但是在发送文件时遇到了一些问题。我最终想要处理一个pandas数据帧(来自表单数据,在本例中未使用,但在将来是必需的),并将其作为csv(没有临时文件)发送下载。我所见过的实现这一点的最好方法是与我们合作 以下是我尝试使用的代码:Python Flask发送_文件StringIO空白文件,python,flask,stringio,Python,Flask,Stringio,我使用的是python 3.5和flask 0.10.1,我很喜欢,但是在发送文件时遇到了一些问题。我最终想要处理一个pandas数据帧(来自表单数据,在本例中未使用,但在将来是必需的),并将其作为csv(没有临时文件)发送下载。我所见过的实现这一点的最好方法是与我们合作 以下是我尝试使用的代码: @app.route('/test_download', methods = ['POST']) def test_download(): buffer = StringIO() bu
@app.route('/test_download', methods = ['POST'])
def test_download():
buffer = StringIO()
buffer.write('Just some letters.')
buffer.seek(0)
return send_file(buffer, as_attachment = True,\
attachment_filename = 'a_file.txt', mimetype = 'text/csv')
文件以正确的名称下载,但该文件完全为空
有什么想法吗?编码问题?其他地方有没有回答这个问题?
谢谢 我想你应该写字节
from io import BytesIO
from flask import Flask, send_file
app = Flask(__name__)
@app.route('/test_download', methods=['POST'])
def test_download():
# Use BytesIO instead of StringIO here.
buffer = BytesIO()
buffer.write(b'jJust some letters.')
# Or you can encode it to bytes.
# buffer.write('Just some letters.'.encode('utf-8'))
buffer.seek(0)
return send_file(buffer, as_attachment=True,
attachment_filename='a_file.txt',
mimetype='text/csv')
if __name__ == '__main__':
app.run(debug=True)
如果有人将Python2.7与Flask一起使用,并通过导入模块StringIO而获得了错误。这篇文章可以帮助你解决你的问题 如果要导入字符串IO模块,只需使用以下命令更改导入语法:来自IO导入StringIO而不是来自StringIO导入StringIO 如果您使用的是image或其他ressource,也可以使用来自io导入字节io的
谢谢这里的问题是,在Python 3中,您需要将
StringIO
与csv一起使用。write
和send_file
需要BytesIO
,因此您必须同时执行这两项操作
@app.route('/test_download')
def test_download():
row = ['hello', 'world']
proxy = io.StringIO()
writer = csv.writer(proxy)
writer.writerow(row)
# Creating the byteIO object from the StringIO Object
mem = io.BytesIO()
mem.write(proxy.getvalue().encode())
# seeking was necessary. Python 3.5.2, Flask 0.12.2
mem.seek(0)
proxy.close()
return send_file(
mem,
as_attachment=True,
attachment_filename='test.csv',
mimetype='text/csv'
)
@但是你不能对一个封闭的文件进行操作。是的,这是有效的——我刚刚知道python 3上的flask不能与StringIO一起工作。后续问题——您知道如何将熊猫数据帧转换为字节csv以供下载吗?@DanielHitchcock Hi,您应该提供一个最小的、完整的、可验证的示例,这样我就可以重现这个问题(类似于这个问题,但使用熊猫数据帧示例),我不太熟悉熊猫,所以我目前的答案是否定的。如果有必要,你可以问另一个问题。这应该是可以接受的答案,因为它在使用send_file()方法导出/下载CSV文件方面更为通用。在编码中,我添加了
“utf-8-sig”
,或者你可能想要“utf-8”
。也看到