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 11 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
python使用tcp实现局域网内文件传输
Mar 20 Python
Python爬虫之pandas基本安装与使用方法示例
Aug 08 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
Python操作rabbitMQ的示例代码
Mar 19 Python
如何使用Python标准库进行性能测试
Jun 25 Python
python写入文件自动换行问题的方法
Jul 05 Python
详解python中的index函数用法
Aug 06 Python
python 求10个数的平均数实例
Dec 16 Python
基于nexus3配置Python仓库过程详解
Jun 15 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 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
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
JS 强制设为首页的代码
2009/01/31 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
python3编码问题汇总
2016/09/06 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
简历自我评价怎么写呢?
2014/01/06 职场文书
班级活动策划书
2014/02/06 职场文书
2014政务公开实施方案
2014/02/19 职场文书
2014年端午节活动方案
2014/03/11 职场文书
局火灾防控工作方案
2014/05/25 职场文书
护校行动方案
2014/05/31 职场文书
日语专业求职信
2014/07/04 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python
netty 实现tomcat的示例代码
2022/06/05 Servers