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中字符编码简介、方法及使用建议
Jan 08 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
Python 加密的实例详解
Oct 09 Python
python使用itchat实现手机控制电脑
Feb 22 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
python如何通过twisted搭建socket服务
Feb 03 Python
python实现自动清理重复文件
Aug 24 Python
python drf各类组件的用法和作用
Jan 12 Python
基于Python实现股票收益率分析
Apr 02 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结合curl实现多线程抓取
2015/07/09 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
jQuery中的常用事件总结
2009/12/27 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
利用python发送和接收邮件
2016/09/27 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
python中的decimal类型转换实例详解
2019/06/26 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Python双链表原理与实现方法详解
2020/02/22 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
传播学专业毕业生自荐信
2013/11/04 职场文书
2014年会演讲稿范文
2014/01/06 职场文书
大学生村官典型材料
2014/01/12 职场文书
社会学专业求职信
2014/02/24 职场文书
保护环境倡议书500字
2014/05/19 职场文书
完美的中文自荐信
2014/05/24 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python