python - 带有特殊字符编解码器的 Pandas read_csv 文件路径无法解码
问题描述
我正在使用 Python 3.5.3 版和 Pandas 0.20.1 版
我使用 read_csv 读取 csv 文件。我根据这篇文章使用了一个文件指针(我更喜欢这个而不是使用 的解决方案_enablelegacywindowsfsencoding()
)。以下代码有效:
import pandas as pd
with open("C:/Desktop/folder/myfile.csv") as fp:
df=pd.read_csv(fp, sep=";", encoding ="latin")
这确实有效。但是,当文件名中有像 ä 这样的特殊字符时,如下所示:
import pandas as pd
with open("C:/Desktop/folderÄ/myfile.csv") as fp:
df=pd.read_csv(fp, sep=";", encoding ="latin")
Python 显示错误消息:(unicode error) 'utf-8' codec can't decode byte oxc4 in position 0: unexpected end of data。
我还尝试在文件路径之前添加一个“r”,但是我得到了相同的错误消息,除了现在我得到一个整数位置,这正是我的特殊字符在文件路径中的位置。
所以原因是文件路径名称中的特殊字符。
(不是可以通过使用 encoding="utf-8" 或任何其他类似 ISO-5589-1 来解决的解码错误。绝对可以肯定,我尝试使用以下编码并总是得到相同的错误消息:utf- 8、ISO-5589-1、cp1252)
解决方案
该错误表明您的源文件(不是数据文件)未以 UTF-8 编码。在 Python 3 中,您的源文件必须以 UTF-8 编码保存,或者您必须使用特殊注释声明保存源文件的编码,例如#coding=Windows-1252
在文件顶部。 \xc4
是 Windows-1252 编码Ä
并且是西欧和美国 Windows 的默认编码,所以这是一个很好的猜测。理想情况下,以 UTF-8 重新保存您的源代码。
例如,如果源是 Windows-1252 编码,数据文件是 GB2312 编码(中文):
#coding=Windows-1252 # encoding of source file
import pandas as pd
with open('DÄTÄ.csv',encoding='gb2312') as f: # encoding of data file
data = pd.read_csv(f)
请注意,源文件默认为 UTF-8 编码,但open
默认为locale.getpreferredencoding(FALSE)
. 由于这因操作系统和配置而异,因此最好在打开文件时始终指定编码。
推荐阅读
- java - 失败的进程调试主清单
- java - 詹金斯中的杀死/释放管道进程
- dart - 有效的 Dart 用法:清除具有相同值和相同类型的变量
- django-models - 有没有办法通过改变另一个模型的布尔状态来改变一个 django 模型的布尔状态
- python - 是否可以在消息中定义变量并稍后将它们用作函数中的变量?
- linux - Ubuntu - 通过 shell 脚本将用户添加到 samba
- ios - 无法解码 BLE 有效载荷
- php - Scandir 递归到具有多维“数组”的 Json
- python-3.x - 将 csv 文件上传到 s3 存储桶时出错 - com.amazonaws.services.s3.model.AmazonS3Exception:状态代码:400
- kotlin - 如何确保异步测试不会干扰另一个?