mac中python读取csv文件编码报错问题解决

发布时间:2019-08-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了mac中python读取csv文件编码报错问题解决脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
注:该文章基于mac环境。

之前在写一个简单的分班程序的时候,使用如下命令行读取csv文件,

@H_777_15@wITh oPEn('city.csv') as f:
    lines = f.readlines()

出现了报错:

‘utf-8’ codec can’t decode byte 0xb1 in position 0: invalid start byte

含义为程序由于文件编码问题无法读取文件。查找了一些解决方法后终于解决,稍稍总结。

出现此种问题的原因,可能来自python程序本身或文件。一是python文件可能没有声明读取文件的编码方式,导致程序无法读取,对应解决方法一;二是文件本身的编码不是utf-8格式,导致程序无法读取,对应解决方法二。

解决方法一:在Python文件中加入编码方式声明

在python文件开头加入一行编码方式声明代码,使用# -*- coding: utf-8 -*-#code=utf-8均可。该行声明了该python程序读取文件的编码格式为utf-8。

如果是由于python程序出现的问题,此时再次运行程序,应不再报错。如仍报错,可使用方法二解决。

解决方法二:修改文件编码方式/修改程序读取方式

假设文件存放路径为/Desktop/System_code/city.csv。打开终端(在应用程序搜索“terminal”),使用cd命令查看system_code文件夹并使用vim命令打开city.csv, 代码如下:

$ cd Desktop/system_code/
$ vim city.csv

此时终端会显示文件详细内容。之后使用:set命令查看文件详情:

mac中python读取csv文件编码报错问题解决


可以看到第4行中fileencoding=latin1,说明此时文件编码方式为latin1而非utf-8。

@H_406_103@1.修改程序读取文件时的编码方式
如果只需要程序适应这一个文件的话,直接修改程序读取文件的编码方式即可,如下。

with open('city.csv', encoding="latin1") as f:
    lines = f.readlines()

2.修改文件编码
有的时候程序需要读取多个文件,而对文件本身就要求为utf-8的格式,这时候就只能修改文件编码了。

之前在查找解决方式的时候看到了两种,第一种使用iconv命令,修改成功。第二种使用vim命令,修改后文件出现乱码。这里将两种都列出。

2.1 使用iconv命令修改
命令为:

iconv -f gbk -t utf-8 origfilename > resultfilename

其中,-f后为文件编码,-t后为转换后文件编码,origfilename为需要转码的文件,resultfilename为保存至的文件。之前我尝试了使用latin1进行转码,发现转出后为乱码,使用gbk则成功,不知道是不是因为文件内容为中文。

以我的文件为例,需要转码的文件为city_latin.csv, 希望将转码后文件保存为city_new.csv,则使用如下命令:

iconv -f gbk -t utf-8 city_latin.csv > city_new.csv

之后使用vim命令查看city_new.csv的编码可看到city_new.csv为正常的utf-8编码文件。

2.2 使用vim命令修改

注:此方式在我的电脑中转换出现乱码,因此不推荐。
:set fileencoding=utf-8

之后再次使用:set命令查看文件格式,可发现文件的编码格式已经被修改为utf-8:

mac中python读取csv文件编码报错问题解决

最后使用:wq命令写入文件并退出vim即可。

脚本宝典总结

以上是脚本宝典为你收集整理的mac中python读取csv文件编码报错问题解决全部内容,希望文章能够帮你解决mac中python读取csv文件编码报错问题解决所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。