这是代码
def download_excel():
try:
logger.info('download_excel, %s' % str(request.form))
form_data = json.loads(request.form.get('data'))
header_names = form_data['header_names']
headers = form_data['headers']
rows = form_data['list']
data = OrderedDefault(list)
for row in rows:
for i, header_name in enumerate(header_names):
header = headers[i]
data[header_name].append(row[header])
file_name = 'temp_data/temp.xlsx'
pd.DataFrame(data).to_excel(file_name, index=False)
response = make_response(send_file(file_name))
return response
except Exception as e:
logger.exception(e)
return make_response('Error', 301)
修改完后代码
def download_excel():
try:
logger.info('download_excel, %s' % str(request.form))
form_data = json.loads(request.form.get('data'))
header_names = form_data['header_names']
headers = form_data['headers']
rows = form_data['list']
data = OrderedDefault(list)
for row in rows:
for i, header_name in enumerate(header_names):
header = headers[i]
data[header_name].append(row[header])
bf = io.BytesIO()
pd.DataFrame(data).to_excel(bf, index=False)
logger.info('Excel file size: {}'.format(bf.tell()))
bf.seek(0)
return send_file(bf, mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
except Exception as e:
logger.exception(e)
return make_response('Error', 301)
1
Nostalgiaaaa 2019 年 8 月 19 日
试试 StringIO ?
|
2
aieike OP @Nostalgiaaaa 我试了,但没成功,可能我的方法不对
|
3
vZexc0m 2019 年 8 月 19 日
|
4
sunhk25 2019 年 8 月 19 日 via Android
参考一下 https://zdyxry.github.io/2018/07/08/Flask-%E6%B5%81%E5%BC%8F%E5%93%8D%E5%BA%94/
这个功能以后有时间也想实现一下 |
6
aieike OP |
7
wuwukai007 2019 年 8 月 19 日 via Android
有个问题,这个 io 是放在内存当中,如何放入 redis 中呢,或者集成到类似 django 的 cache 中
|
8
janxin 2019 年 8 月 19 日
@wuwukai007 这个 io 是 file-like,支持读写操作
|
9
wuwukai007 2019 年 8 月 19 日 via Android
@ janxin 我的意思是,如果用户量大的话,这个 io 是用的本地的内存,怎么用 redis 之类作为 io 的存储
|
10
reself 2019 年 8 月 19 日 via Android
用 BytesIO 试试看,pandas 有个 ExcelWriter 组件,可以往 filelike 的对象里写东西。对了,io 对象写好过后记得要 seek(0)。
|
11
1462326016 2019 年 8 月 20 日
一楼的意思应该是 BytesIO ?
|
12
ebingtel 2019 年 8 月 20 日
@wuwukai007 既然是 file-like,可以 read 出来,存进 redis 的吧?但是存个 excel 的 io 好,还是存原始的数据,这个还需要权衡下
|
14
aieike OP 还有一个问题,想问一下, 这个 Bytesio 需不需要像文件那样 close
|
15
LUXiaobo 2019 年 8 月 21 日
试试 tempfile
|