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的多态性实例分析
Jul 07 Python
python实现超市扫码仪计费
May 30 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
Jun 17 Python
Django实现文件上传和下载功能
Oct 06 Python
浅析python中while循环和for循环
Nov 19 Python
基于Pycharm加载多个项目过程图解
Jan 19 Python
在tensorflow中实现去除不足一个batch的数据
Jan 20 Python
django使用JWT保存用户登录信息
Apr 22 Python
8种常用的Python工具
Aug 05 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 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
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
PHP.vs.JAVA
2016/04/29 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
js中事件对象和事件委托的介绍
2019/01/21 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
详解Python在七牛云平台的应用(一)
2017/12/05 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
python爬虫中多线程的使用详解
2019/09/23 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
童装店创业计划书
2014/01/09 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
咖啡店创业计划书
2014/08/15 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书