python csv写文件,用Excel打开中文乱码解决

最近在学习python爬虫,需要将爬取的数据存储为csv格式,方便用Excel打开更直观的分析。

这里应用的是豆瓣的排行榜,爬虫入门好像逃不脱这个网站,哈哈)

python 中csv的代码段是这样的

import csv

csv_headers = {'剧名','评分','年份','参与评论数'}
# 打开一个用来存储数据的文件(文件可以是已经存在,也可以是不存在)
f = open('douban.csv','w',encoding='utf-8')
# 初始化一个csv.writer()对象
f_csv = csv.writer(f)
# 将需要存储的数据进行写入
f_csv.writerow(csv_headers)
f_csv.writerow(data)

用文本编辑器打开显示是正常的,但是用Excel打开时,发现中文字符出现了乱码情况,如图:

        

办法一:

这种情况的出现是因为用excel 打开CSV文件时,会询问用户设置文件的编码格式,但因为用户对Excel的一些默认设置,可能导致用户在打开csv文件时乱码,这时需要在代码中为生成的csv文件添加bom头,为文件强制设置utf-8编码格式避免用户打开文件乱码。

utf-8保存的csv格式文件要让Excel正常打开的话,必须加入在文件最前面加入BOM(Byte order )。如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

所以在write文件的内容数据之前,先write一下BOM。

python3+ 在写文件之前,只需要添加一条代码即可解决:

f_csv.writerow('\ufeff')

办法二:

也可以将encoding=‘utf-8' 改成 ’utf-8-sig',也能起到相同的效果,正常显示中文字符。

f = open('douban.csv','w',encoding='utf-8-sig')

区别如下:

1、”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生类似上边的错误。

2、“utf-8-sig"中sig全拼为 signature 也就是"带有签名的utf-8”, 因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开,也是我们期望的结果。

最后,用Excel打开后显示都是正常的中文字符。(大功告成!^_^)

 

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值