python 写入csv乱码问题解决方法


Posted in Python onOctober 23, 2016

需求背景

最近为公司开发了一套邮件日报程序,邮件一般就是表格,图片,然后就是附件。附件一般都是默认写到txt文件里,但是PM希望邮件里的附件能直接用Excel这种软件打开,最开始想保存为Excel,但是一想Excel的文件体积会多出好多倍,csv文件默认也是使用Excel打开的,但是根本还是文本文件,体积小,保存也方便,于是最终决定使用csv模块来保存文件。

Python写csv文件

Python提供了内置模块读写csv文件,这里我只用到了写,读这里就不做介绍了,也不难,主要是解决乱码问题。

def save2csv(file_name=None, header=None, data=None):
"""
保存成CSV格式文件,方便Excel直接打开
:param file_name: 保存的文件名
:param header: 表头,每一列的名字
:param data: 具体填充数据
:return:
"""
if file_name is None or isinstance(file_name, basestring) is False:
raise Exception('保存CSV文件名不能为空,并且必须为字符串类型')
if file_name.endswith('.csv') is False:
file_name += '.csv'
file_obj = open(file_name, 'wb')
file_obj.write(codecs.BOM_UTF8) # 防止乱码
writer = csv.writer(file_obj)
if data is None or isinstance(data, (tuple, list)) is False:
raise Exception('保存CSV文件失败,数据为空或者不是数据类型')
if header is not None and isinstance(header, (tuple, list)) is True:
writer.writerow(header)
for row in data:
writer.writerow(row)

注意:有三句话就是为了防止乱码的

file_obj = open(file_name, 'wb')
file_obj.write(codecs.BOM_UTF8) # 防止乱码
writer = csv.writer(file_obj)

在文件头部写入codecs.BOM_UTF8就能防止乱码了,文件都是utf-8编码格式的

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python模块restful使用方法实例
Dec 10 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
python+Django+apache的配置方法详解
Jun 01 Python
Python完成毫秒级抢淘宝大单功能
Jun 06 Python
python中dict使用方法详解
Jul 17 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
python实现udp传输图片功能
Mar 20 Python
Python常用编译器原理及特点解析
Mar 23 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 Python
PyMongo 查询数据的实现
Jun 28 Python
Python必备技巧之字符数据操作详解
Mar 23 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 #Python
python 读写txt文件 json文件的实现方法
Oct 22 #Python
Python类属性的延迟计算
Oct 22 #Python
如何在Python函数执行前后增加额外的行为
Oct 20 #Python
如何利用Fabric自动化你的任务
Oct 20 #Python
windows下ipython的安装与使用详解
Oct 20 #Python
Python做文本按行去重的实现方法
Oct 19 #Python
You might like
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
python求解水仙花数的方法
2015/05/11 Python
Python 基础知识之字符串处理
2017/01/06 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
python实现人工蜂群算法
2020/09/18 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
软件测试工程师结构化面试题库
2016/11/23 面试题
临床医学专业毕业生的自我评价
2013/10/17 职场文书
实用的简历自我评价
2014/03/06 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
客户答谢会活动方案
2014/08/31 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
MySQL学习之基础操作总结
2022/03/19 MySQL