python读取csv文件中文乱码(python csv文件读取)

http://www.itjxue.com  2023-04-13 16:39  来源:未知  点击次数: 

python读取csv文件时,数据内容含有中文,读取出错,怎么办

读取文件错并颂误现象:

触发DecodeError异常,程序终止运行并打印输出错误乱棚信息

主要原因:

一般是文哗蔽则件的编码方式与python的解码不一致造成

解决办法:

在读取文件时,通过encoding命名参数指定解码方式,比如encoding='utf-8'

windows下Psychopy3保存文件中文乱码解决办法

最近在使用psychopy3时出现一件非常奇怪的事情:运行结束后保存的csv文件中文乱码并错行。

如图所示:instr是指导语变量,image_file是图片的路径。

这是一个很简单的使用程序,我就直接用了psychopy图形化的builder窗口。这个实验用conditions.xlsx文件控制循环。因为不同的trial指导语不一样,在conditions里面写了一些中文的指导语。但在运行完该程序后,获取到的数据里面中文全部乱码而且有错列,例如本来应该两列的东西拼到了一列。但是在运行呈现的时候,展现出来的指导语都是中文,且脊悉正确。

结合windows下使用python的经验,我估摸着是windows的编码问题。

到这里基本上已经解决了主要问题。但是后续还会出现这种情况,需要进一步查明为什么utf-8在这里无效。首先一个个排除了.py文件的编码问题,全是utf-8。

解决办法1:

1、找到psychopy安装路径下樱御乎的experiment文件,例如:PsychoPy3\Lib\site-packages\psychopy\data\experiment.py

2、把里拆型面def saveAsWideText这一行的 encoding = 'utf-8' 改成 encoding = 'utf-8-sig',保存!!

3、再运行就OK了。

这种方法有个 弊端 ,就是如果你不使用Excel而是用R语言处理最终的csv数据,那么在用R读入该文件的时候可能需要指定encoding = "utf-8-sig"。

解决办法2:

安装LibreOffice,并将之修改为.csv文件的默认打开程序,该问题就解决了。弊端:这个办法就是要新安装一个软件。

最终发现根本问题在于使用windows里EXCEL打开这个csv文件时,EXCEL默认给这个文件加了BOM,导致这个原本UTF-8编码的文件显示错乱。

也就是原本UTF-8编码的文件,EXCEL非要用UTF-8-sig的编码去打开,导致显示错乱。

python解决csv文件用excel打开乱码问题

【问题】

python输扒携出的csv文件用excel打开,里面的中文会变成乱码,但用window下的记事本或mac下的numbers打开就正常显示。

原因是python输出的文件是utf-8编码写入的,excel默认以gbk方式读取,导致乱码发生。

【解决方法1】文件产出时encoding设置为utf-8-sig????

用excel打开csv时,excel会先检查文件的第一个字符,来了解这个文件是什么编码方式,如果这个字符是BOM,excel就知道用utf-8的方式打开这个文件。python自带了处理BOM的编码方式uft-8-sig,因此只需要在文件产出时将encoding设置为utf-8-sig。

如果文件不是由python产出的,只需要以utf-8方式读入再以utf-8-sig方式存储即可

【解决方法2】懒人法,适用只含简体中文的文件拿此数

用记事本打开,点击另存为,右下角编码方式选择“ANSI”,这个过程是把这个文件改成gbk编码格式,excel就是默认用gbk方式打开的。

参考: Python写的csv文件,如何让 Excel 双击打开不乱码? - 云+社区 - 腾讯云

对编码格式一窍不通的可以阅读以下网页

python笔记——二进制和文件编码_砍柴姑娘Jourosy的博客-CSDN博客

编码方式之ASCII、ANSI、Unicode概述 - 蓝海人 - 博客园

【简单总结】:

1. 首先需要了解 字符集 和 字符编码 两个概念,字符集定义了字符和二进制的一一对应关系,字符编码规定了如何将字符的编号消首存储到计算机中。

2. Unicode是字符集,包含了全球文字的唯一编码,utf-8是编码方式,将unicode以某种方式存储到计算机中。

3. 有些字符集和编码是结合在一起的,称作字符集还是编码都无所谓,比如ASCII,GBK

4. ANSI是各个国家地区不同扩展编码方式的总称,互不兼容(可以看出来通用性没有utf好)

5. 不同编码方式在转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

python写文件中文乱码

这是因为IDLE中使用gbk编码,是ascii扩展字符集。

import sys

sys.getdefaultencoding()

'ascii'解决方法:

在IDLE中执行的时候

去掉字符串前面的u字符,也不要加#coding这一行。

2. 先import sys,然后reload(sys),再使用sys.setdefaultencoding("utf-8")。然后就可梁丛以打印竖渣核前面带u的字符串了余掘。(这是搜来的方法,实验了一下,发现在我这没有输出了。。重启了IDLE,才可以输出,不过又变会ascii了)

在文件中执行

在文件开头声明#coding行,文件保存为utf8编码,在字符串开头加u

(责任编辑:IT教学网)

更多

推荐MYSQL文章