资讯专栏INFORMATION COLUMN

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

paulli3 / 3205人阅读

摘要:之前在写一个简单的分班程序的时候,使用如下命令行读取文件出现了报错含义为程序由于文件编码问题无法读取文件。该行声明了该程序读取文件的编码格式为。如仍报错,可使用方法二解决。第二种使用命令,修改后文件出现乱码。

注:该文章基于mac环境。

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

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命令查看文件详情:

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

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:

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42638.html

相关文章

  • Python3网络爬虫实战---31、数据存储:文件存储

    摘要:如果该文件已存在,文件指针将会放在文件的结尾。运行结果以上是读取文件的方法。为了输出中文,我们还需要指定一个参数为,另外规定文件输出的编码。 上一篇文章:Python3网络爬虫实战---30、解析库的使用:PyQuery下一篇文章:Python3网络爬虫实战---32、数据存储:关系型数据库存储:MySQL 我们用解析器解析出数据之后,接下来的一步就是对数据进行存储了,保存的形式可以...

    dreamans 评论0 收藏0
  • Python如何批量将csv文件编码方式转换为UTF-8?下面就给大家解答

      csv文件其实就是单纯的储存文本数据的一种形式,那么,在日常的办公当中,要怎么做去提高其办公的效率呢?比如,如何使用Python去批量的进行处理文件,批量的处理csv文件,怎么将编码转换成为YTF-8的形式呢?下面给大家详细的解答下。  当我们用pandas是操作CSV文件的时候,常常会因为编码问题出现报错。  pandas_libsparsers.pyx in pandas._libs.pa...

    89542767 评论0 收藏0
  • 一次爬虫实践记录

    摘要:在和伟锋探讨的时候,我突然想到了可以用爬虫的手段,来将数据中心的数据全部爬取出来。这里做一个技术记录,中间涉及到的知识点包括如何通过中的,以及维持登陆状态,以爬取不同的需要登陆以后才能查看的网页。 前言说明: 公司在2017年3月的时候开发过一个「数据中心」,是将有赞的用户和订单信息通过API拉取到自己开发的网站上,再结合我们自己和用户沟通的信息,组成一个简单的用户管理中心。数据中心虽...

    hzx 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<