python中写入csv,excel显示、pandas读取csv文件的编码问题

python 中的编码问题简直就是一个大坑。

最近用到了csv存入微信数据,并且从csv读出处理,由于微信中昵称、签名等往往含有无法识别字符,导致编码问题严重。


因此分享一下心得,减少入坑时间。。


一、csv文件写入问题

encode('gbk', 'ignore').decode('gbk')
写入时由于含有无法识别字符,导致写入失败(编码错误),此时,需要过滤掉该字符,通过encode('gbk', 'ignore').decode('gbk')方法

完整写入过程:

    # 写入csv
    csvfile = open('friend2.csv', 'w', newline='')  # , encoding='utf-8'
    writer = csv.writer(csvfile)
    writer.writerow(['name', 'city', 'male', 'star', 'signature', 'remark', 'alias', 'nick'])
    for Member in MemberList:
        # 写入csv
        writer.writerow([name.encode('gbk', 'ignore').decode('gbk'), city.encode('gbk', 'ignore').decode('gbk'),
                         Member['Sex'],
                         Member['StarFriend'], sign.encode('gbk', 'ignore').decode('gbk'),
                         remark.encode('gbk', 'ignore').decode('gbk'),
                         alias.encode('gbk', 'ignore').decode('gbk'),
                         nick.encode('gbk', 'ignore').decode('gbk')])
    csvfile.close()

注意:open 函数中的newline='' 必不可少。否则会多出空白行。


Excel也可以正常查看csv文件,没有乱码。



二、csv文件读取问题

1.一个简单的读取

with open('../friend2_v2.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=':', quotechar='|')
    for row in reader:
        print(', '.join(row))

csvfile.close()

2.利用pandas库的读取

import pandas as pd

df = pd.read_csv('friend2_v2.csv', encoding="ISO-8859-1")  # 奇怪的编码
只需要加上

encoding="ISO-8859-1"

这句奇怪的编码就可以正常读取。

否则会有解码报错如下:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 6: invalid    continuation byte

此处参考自:http://stackoverflow.com/questions/18171739/unicodedecodeerror-when-reading-csv-file-in-pandas-with-python


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值