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程序中实现分布式进程的教程
Apr 28 Python
Python中用max()方法求最大值的介绍
May 15 Python
python使用pyqt写带界面工具的示例代码
Oct 23 Python
pandas.DataFrame 根据条件新建列并赋值的方法
Apr 08 Python
python中验证码连通域分割的方法详解
Jun 04 Python
python实现顺序表的简单代码
Sep 28 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
python tornado修改log输出方式
Nov 18 Python
Python 求数组局部最大值的实例
Nov 26 Python
Python 绘制可视化折线图
Jul 22 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
杏林同学录(一)
2006/10/09 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
javascript &&和||运算法的另类使用技巧
2009/11/28 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
javascript中 try catch用法
2015/08/16 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python饼状图的绘制实例
2019/01/15 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
Python简易版图书管理系统
2019/08/12 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
班组长的岗位职责
2013/12/09 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
结婚保证书范文
2014/04/29 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
消防安全标语
2014/06/07 职场文书
灵魂歌王观后感
2015/06/17 职场文书
公司安全管理制度范本
2015/08/05 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技