pandas.read_csv FileNotFoundError: 文件 b'\xe2\x80\xaa<etc>' 虽然路径正确,但找不到文件

21

我正在尝试使用pd.read_csv()函数加载一个.csv文件,但是即使文件路径正确并使用原始字符串,我也会遇到错误。

import pandas as pd
df = pd.read_csv('‪C:\\Users\\user\\Desktop\\datafile.csv')
df = pd.read_csv(r'‪C:\Users\user\Desktop\datafile.csv')
df = pd.read_csv('C:/Users/user/Desktop/datafile.csv')

所有都会出现以下错误:

FileNotFoundError: File b'\xe2\x80\xaaC:/Users/user/Desktop/tutorial.csv' (或相关路径)不存在。

只有当我将文件复制到工作目录中时才能正确加载。

有人知道是什么原因引起的错误吗?

之前我已经加载了其他带有完整文件路径的数据集,没有遇到任何问题,而且自从我重新安装了Python(通过Anaconda软件包安装程序)以来,我目前只遇到了问题。


编辑:
我找到了导致问题的原因。
当我从文件属性窗口中复制文件路径时,无意中复制了另一个似乎是不可见的字符。
分配该复制的字符串也会导致Unicode错误。

删除该不可见字符后,上述代码就可以工作了。


5
e2 80 aa 是 U+202A 左至右嵌入符号的 UTF-8 编码。很确定这不应该出现在路径字符串中,因此这表明您可能有一个字符串编码问题。如果您在 py27 中,请尝试使用 Unicode 字符串字面量(u'C:\\...'),如果您在 py3 中,请尝试使用字节字符串字面量(b'C:\\...')。 - wildwilhelm
1
如果从路径中删除驱动器(即'/Users/user/Desktop/datafile.csv'),它是否有效? - cmaher
2
不确定U+202A是怎么进去的。这是剪切/粘贴的吗?如果是,那就删除并手动重新输入。你的系统默认语言是什么?如果是从右到左书写的话,那就很有趣了!我有点惊讶这个字符没有被文件系统过滤掉。 - tdelaney
1
最有可能的原因似乎是您使用的编码出现了问题。 - Anwar Shaikh
2
我也遇到了相同的问题。当我从Windows中文件属性的安全选项卡复制文件路径时,似乎会出现额外的字符。有人知道这个非Unicode字符是什么吗? - Jamie Marshall
显示剩余4条评论
14个回答

31

试一下看看是否可行,这与您提供的路径无关。

pd.read_csv(r'C:\Users\aiLab\Desktop\example.csv')
在Python中,r是一个特殊字符,表示原始字符串。因此,在字符串前面加上它。Python原始字符串是通过在字符串文字前缀加上'r'或'R'来创建的。Python原始字符串将反斜杠(\)视为字面字符。当我们想要包含反斜杠的字符串并且不希望它被视为转义字符时,这非常有用。参考链接:https://www.journaldev.com/23598/python-raw-string

4
这个做法解决了问题吗?它确实为我解决了,但我不明白原理。 - user1318135
2
修复了我也遇到的同样问题..仍然不知道是什么导致了错误以及如何解决它。非常感谢。 - Nats De

12

$10 坐实你的文件路径相对于 .py 文件的位置是正确的,但相对于你调用 Python 的位置是不正确的。

例如,假设 script.py 位于 ~/script/,而 file.csv 位于 ~/.。 假设 script.py 包含以下内容:

import pandas
df = pandas.read_csv('../file.csv') # correct path from ~/script/ where script.py resides
如果你在~目录下运行python script/script.py,会出现文件不存在的错误。但是,如果你在~/script/目录下运行python script.py,就可以正常工作。

3
我使用了完整的文件路径,所以我的$10是安全的!我发现导致这个问题的原因了!它是一个被复制的不可见字符。看起来为了一个小问题而引起了很大的恐慌! - Impuls3H
@Impuls3H 你所说的“不可见字符”是什么意思?是指末尾的空格吗? - user1318135
5
好的,我现在欠一个陌生人10美元。 - Ken
1
@Ken,我刚加入这个俱乐部。 - Anonymous Person

3
import pandas as pd

path1 = 'C:\\Users\\Dell\\Desktop\\Data\\Train_SU63ISt.csv'
path2 = 'C:\\Users\\Dell\\Desktop\\Data\\Test_0qrQsBZ.csv'

df1 = pd.read_csv(path1)
df2 = pd.read_csv(path2)

print(df1)
print(df2)

3

我知道以下是一个愚蠢的错误,但这可能是你的文件出了问题。

我已经手动将文件从adfa123重命名为abc.csv。 文件的扩展名被隐藏了,重命名后,实际文件名变成了abc.csv.csv。 然后我从名称中删除了多余的.csv,一切正常。

希望这能帮助其他人。


3
在Windows系统上,您应该尝试使用os.path.normcase

它规范化路径名的大小写。在Unix和Mac OS X上,它返回未更改的路径; 在不区分大小写的文件系统上,它将路径转换为小写。在Windows上,它还将斜杠转换为反斜杠。如果路径的类型不是str或bytes(通过os.PathLike接口直接或间接地)则会引发TypeError。
import os
import pandas as pd

script_dir = os.getcwd()
file = 'example_file.csv'
data = pd.read_csv(os.path.normcase(os.path.join(script_dir, file)))

2
如果你使用的是Windows机器,请检查文件扩展名。文件很可能被保存为fileName.csv.txt而不是fileName.csv。您可以通过在文件夹选项下选择“文件名扩展名”复选框来检查这一点(请参见截图)。
以下代码对我有用:
最初的回答:如果您使用的是Windows机器,请检查文件扩展名。文件很可能被保存为fileName.csv.txt而不是fileName.csv。您可以通过在文件夹选项下选择“文件名扩展名”复选框来检查这一点(请参见截图)。以下代码对我有用:
import pandas as pd
df = pd.read_csv(r"C:\Users\vj_sr\Desktop\VJS\PyLearn\DataFiles\weather_data.csv");

如果文件名为fileName.csv.txt,请将其重命名/更正为fileName.csv

Windows 10 屏幕截图

祝一切顺利,Good Luck。

1

当通过Visual Studio提供的交互功能运行文件时,我遇到了相同的问题。转而在本机命令行上运行,这对我有用。


1
对于我的问题,文件无法正确加载是由于我从Windows文件属性的安全选项卡中复制文件路径时引入了一个“不可见”的字符。这个字符是e2 80 aa,它是U+202A的UTF-8编码,即从左到右的嵌入符号。当您找到该字符(字符串中最左边的字符)后,可以通过删除(按退格键或删除键)轻松删除它。
注意:我选择回答是因为这里的答案没有回答我的问题,我认为一些人(如评论中所见)可能会遇到与我相同的情况。由于我没有将此问题标记为已解决,因此似乎每隔一段时间就会有新的答案。

1
我试图从'C:\'驱动器中的文件夹读取csv文件,但是它引发了escape,type error, unicode等错误......不过这段代码可以工作,只需将变量加上r即可读取。
rank = pd.read_csv (r'C:\Users\DELL\Desktop\datasets\iris.csv') 
df=pd.DataFrame(rank)

1
我已经完成了它,它正在工作。即使那个解决方案是正确的,但添加“r”使它有所不同。 - Rakesh

1

如何删除看似不可见的字符是另一个问题。

我的解决方案是从文件窗口而不是属性窗口复制文件路径。

唯一的问题是您需要填写完整的文件路径。


1
我也遇到了同样的问题,不知道为什么,如果你从属性窗口复制,它会添加额外的不可见字符。我能够验证这一点,因为如果我手动输入路径,它就可以正常工作。这绝对是我最近遇到的最奇怪的错误之一。 - areed1192

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接