您的位置:首页 > 编程语言 > Python开发

【Python】导出csv文件,解决Excel乱码

2018-11-13 11:24 429 查看
版权声明:本文为博主原创文章,如有不同见解,敬请评论指正。 https://blog.csdn.net/qq_41902687/article/details/84025983

使用Python提供的csv模块,导出excel文件,指定编码格式后,在Windows中打开依然出现乱码,原因:Windows的Excel使用BOM来确定文件是UTF8编码,将BOM写在文件开头即可。

使用csv模块,配合django.http.StreamingHttpResponse使用生成器进行流式传输

流式传输csv, 并解决windows乱码问题

创建Echo类,用于暂存数据

class Echo(object):
def write(self, value):
return value

在view.py中返回csv格式文件

import csv
import codecs
from itertools import chain
from django.http import StreamingHttpResponse
from utils import generate_table  # 生成表格数据

def export_csv(request, *args, **kwargs):
table = generate_table()
pseudo_buffer = Echo()
pseudo_buffer.write(codecs.BOM_UTF8)  # 用于excel识别UTF8编码
writer = csv.writer(pseudo_buffer, dialect='excel')
response = StreamingHttpResponse(
(writer.writerow(row) for row in table)),
content_type="text/csv")
response['Content-Disposition'] = f'attachment; filename={filename}'
return response

另外,Django还提供了FileResponse用于返回文件类型的响应,FileResponse继承于StreamHttpResponse.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: