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 Admin实现上传图片校验功能
Mar 06 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
Python中创建二维数组
Oct 17 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
利用pyinstaller打包exe文件的基本教程
May 02 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
keras 权重保存和权重载入方式
May 21 Python
详解torch.Tensor的4种乘法
Sep 03 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 Python
关于python pygame游戏进行声音添加的技巧
Oct 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
PHP线程的内存回收问题
2016/07/08 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
老生常谈js数据类型
2017/08/03 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中编写ORM框架的入门指引
2015/04/29 Python
import的本质解析
2017/10/30 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
在双python下设置python3为默认的方法
2018/10/31 Python
Flask配置Cors跨域的实现
2019/07/12 Python
tensorflow 变长序列存储实例
2020/01/20 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
英国医生在线预约:Top Doctors
2019/10/30 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
教师的实习鉴定
2013/12/15 职场文书
电气工程师岗位职责
2014/01/01 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
小学班主任事迹材料
2014/12/17 职场文书
公司内部升职自荐信
2015/03/27 职场文书
导游词之南京中山陵
2019/11/27 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers