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连接sql server乱码的解决方法
Jan 28 Python
python类继承用法实例分析
May 27 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
查看python下OpenCV版本的方法
Aug 03 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
django 外键创建注意事项说明
May 20 Python
Python如何实现自带HTTP文件传输服务
Jul 08 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
记一次Django响应超慢的解决过程
Sep 17 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 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中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
JavaScript经典效果集锦
2010/07/06 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
Python NumPy库安装使用笔记
2015/05/18 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
文言文形式的学生求职信
2013/12/03 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
先进个人获奖感言
2014/01/24 职场文书
大学学习计划书范文
2014/05/02 职场文书
2014年技术部工作总结
2014/12/12 职场文书
七一活动主持词
2015/06/29 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书