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 相关文章推荐
scrapy爬虫实例分享
Dec 28 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
Python中如何导入类示例详解
Apr 17 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
Pandas 解决dataframe的一列进行向下顺移问题
Dec 27 Python
Django 路由层URLconf的实现
Dec 30 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
详解Python自动化之文件自动化处理
Jun 21 Python
PO模式在selenium自动化测试框架的优势
Mar 20 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中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
Laravel 5 学习笔记
2015/03/06 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
Python连接数据库学习之DB-API详解
2017/02/07 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
如何对python的字典进行排序
2020/06/19 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
英文求职信写作小建议
2014/02/16 职场文书
研究生求职自荐书
2014/06/23 职场文书
庆七一活动总结
2014/08/27 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
八年级语文教学反思
2016/03/03 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
HTTP中的Content-type详解
2022/01/18 HTML / CSS