小明: 嘿,小李,我们最近的数据分析系统已经基本完成了,但是客户希望增加一个下载功能。你觉得应该怎么实现呢?
小李: 这是个好主意!我们可以先设计一个API接口,用户可以通过这个接口请求数据下载。然后我们需要处理文件格式的问题,比如CSV或者JSON。
小明: 明白了,那我们从哪里开始呢?
小李: 首先,我们需要定义一个API接口,让前端能够调用。我可以使用Python Flask框架来快速搭建这个接口。
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/download', methods=['GET'])
def download_data():
data = {"key": "value", "number": 123}
return jsonify(data)
if __name__ == '__main__':
app.run(debug=True)
小明: 这段代码看起来不错,它会返回一个JSON格式的数据。但如果用户需要的是CSV格式怎么办?
小李: 很简单,我们只需要稍微修改一下返回的内容。我建议使用pandas库来处理数据并将其转换为CSV格式。
import pandas as pd
from flask import send_file
@app.route('/download_csv', methods=['GET'])
def download_csv():
df = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
csv_file = df.to_csv(index=False)
return send_file(
csv_file,
mimetype='text/csv',
attachment_filename='data.csv',
as_attachment=True
)
小明: 看起来很专业!不过,如果用户上传了大量数据怎么办?会不会导致性能问题?
小李: 这确实是一个需要考虑的问题。为了避免内存溢出,我们可以将数据流式传输到文件中,而不是一次性加载所有数据到内存里。
@app.route('/stream_download', methods=['GET'])
def stream_download():
def generate():
for row in range(1000):
yield f"{row}, {row**2}\n"
return Response(generate(), mimetype='text/csv')
小明: 太棒了!现在我们的数据分析系统不仅有了下载功能,还支持多种格式和高效的流式传输。
小李: 是的,这只是一个起点。未来我们还可以添加更多的功能,比如压缩文件下载等。
]]>