首页 > 解决方案 > 带有特殊字符编解码器的 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)

标签: pythonpandascsvutf-8filepath

解决方案


该错误表明您的源文件(不是数据文件)未以 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). 由于这因操作系统和配置而异,因此最好在打开文件时始终指定编码。


推荐阅读