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参数和作用域的使用
Nov 01 Python
python实现基本进制转换的方法
Jul 11 Python
Python判断列表是否已排序的各种方法及其性能分析
Jun 20 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
windows下安装Python和pip终极图文教程
Mar 05 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
Python数据可视化之画图
Jan 15 Python
Python玩转PDF的各种骚操作
May 06 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
python绘制简单直方图(质量分布图)的方法
Apr 21 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
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
React实现全选功能
2020/08/25 Javascript
js实现缓动动画
2020/11/25 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python3实现Web网页图片下载
2016/01/28 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
python实现自动发送报警监控邮件
2018/06/21 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
tensorflow 变长序列存储实例
2020/01/20 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
python 如何在测试中使用 Mock
2021/03/01 Python
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
汇科协同Java笔试题
2012/03/31 面试题
师范毕业生自我鉴定
2014/01/15 职场文书
仓管员岗位责任制
2014/02/19 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
2014年接待工作总结
2014/11/26 职场文书
写给女朋友的保证书
2015/05/09 职场文书
纯html+css实现Element loading效果
2021/08/02 HTML / CSS
MySQL添加索引特点及优化问题
2022/07/23 MySQL