flask+pandas+vue,需要将多个dataframe存入csv文件,并将多个CSV文件放入一个压缩包进行下载,给出代码示例
时间: 2024-01-13 17:03:06 浏览: 199
基于 Flask、Echarts、Pandas 等实现的图书分析大屏展示系统.rar
好的,下面是一个示例代码,其中使用了 Flask、Pandas 和 Python 的 zipfile 库,同时使用了 Vue 作为前端框架。
Flask 后端代码:
```python
from flask import Flask, Response
import pandas as pd
import zipfile
import io
app = Flask(__name__)
@app.route('/download')
def download():
# 生成数据
df1 = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
df2 = pd.DataFrame({'c': [7, 8, 9], 'd': [10, 11, 12]})
# 存储数据到 CSV 文件
df1.to_csv('data1.csv', index=False)
df2.to_csv('data2.csv', index=False)
# 打包 CSV 文件到 Zip 文件
buffer = io.BytesIO()
with zipfile.ZipFile(buffer, 'w') as zip:
zip.write('data1.csv')
zip.write('data2.csv')
# 返回 Zip 文件
buffer.seek(0)
return Response(buffer, mimetype='application/zip', headers={
'Content-Disposition': 'attachment;filename=data.zip'
})
```
Vue 前端页面代码:
```html
<template>
<div>
<button @click="download">Download</button>
</div>
</template>
<script>
export default {
methods: {
download() {
const url = '/download'
const filename = 'data.zip'
fetch(url).then(response => {
response.blob().then(blob => {
const link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
link.download = filename
link.click()
window.URL.revokeObjectURL(link.href)
})
})
}
}
}
</script>
```
这个示例代码中,我们使用了 Flask 的路由 `/download` 来处理下载请求。在这个路由中,我们使用 Pandas 生成了两个 DataFrame,然后分别存储到了两个 CSV 文件中。接着,我们使用 Python 的 zipfile 库将这两个 CSV 文件打包成一个 Zip 文件,并将这个 Zip 文件返回给了前端。
在前端页面中,我们使用了一个按钮来触发下载事件。在下载事件中,我们使用了 fetch 函数来获取下载链接,然后使用 Blob 对象将返回的数据转换成二进制数据,并使用 URL.createObjectURL 函数生成一个下载链接。最后,我们创建一个 `<a>` 标签,设置这个标签的 href 属性为下载链接,设置 download 属性为文件名,然后触发这个标签的点击事件来下载文件。
希望这个示例能够帮助到你!
阅读全文