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 相关文章推荐
如何搜索查找并解决Django相关的问题
Jun 30 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
Python单元测试框架unittest使用方法讲解
Apr 13 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
Python中用altzone()方法处理时区的教程
May 22 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 Python
python读取mysql数据绘制条形图
Mar 25 Python
Pycharm快捷键配置详细整理
Oct 13 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
Python操作Excel的学习笔记
Feb 18 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
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
JS画线(实例代码)
2013/11/20 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
Django REST framework 视图和路由详解
2019/07/19 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
python opencv如何实现图片绘制
2020/01/19 Python
python入门之井字棋小游戏
2020/03/05 Python
html5视频播放_动力节点Java学院整理
2017/07/13 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
静态成员和非静态成员的区别
2012/05/12 面试题
管道维修工岗位职责
2013/12/27 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
志愿者事迹材料
2014/12/26 职场文书