Pandas.read_csv() FileNotFoundError 即使文件存在

Posted

技术标签:

【中文标题】Pandas.read_csv() FileNotFoundError 即使文件存在【英文标题】:Pandas.read_csv() FileNotFoundError even though file exists 【发布时间】:2020-03-31 13:01:39 【问题描述】:

我尝试在我的 Anaconda Jupyter Notebook 中运行这段 Python 3 代码(相同的单元格,没有其他内容):

train  = pd.read_csv('tutorial\labeledTrainData.tsv', header=0, delimiter="\t", quoting=3) #OK!
test   = pd.read_csv('tutorial\testData.tsv',         header=0, delimiter="\t", quoting=3) #FileNotFoundError!

第一行运行正常,但第二行出错:

FileNotFoundError: [Errno 2] File b'tutorial\testData.tsv' does not exist: b'tutorial\testData.tsv'

dir 命令在相应的 tutorial 文件夹中给出:

06.12.2019  15:38    <DIR>          .
06.12.2019  15:38    <DIR>          ..
05.05.2018  20:07        33 556 378 labeledTrainData.tsv
05.05.2018  20:07           282 796 sampleSubmission.csv
05.05.2018  20:07        32 724 746 testData.tsv
05.05.2018  20:07        67 281 491 unlabeledTrainData.tsv

即“问题”文件 testData.tsv 在那里,在“好” labeledTrainData.tsv 旁边。

如果我改变第二行的斜线方向并像这样运行它:

train  = pd.read_csv('tutorial\labeledTrainData.tsv', header=0, delimiter="\t", quoting=3) #OK!
test   = pd.read_csv('tutorial/testData.tsv',         header=0, delimiter="\t", quoting=3) #OK!

然后两条线都运行得很好。同样,如果我将 r 放在问题文件名之前,它们运行良好:

test   = pd.read_csv(r'tutorial\testData.tsv',         header=0, delimiter="\t", quoting=3) #OK!

我检查了两个文件的属性——没有一个是隐藏的,也不是只读的,权限是相等的,等等。

更改单元格中的行顺序不会更改错误 - 相同的文件有问题...

我想知道问题pandas(或python?)在第二行代码中看到了什么,而我没有看到?

【问题讨论】:

如果您要寻找更通用的解决方案,请查看pathlib 模块 在路径中使用正斜杠 / 或双反斜杠代替反斜杠 ``。 感谢您对我的问题的评论。是的,就像我最初提到的那样,r,反斜杠/ - 他们都工作得很好。我的问题是为什么两行相同的代码 - 一个有效,另一个失败?是什么导致第二行抛出异常,而第一行在相同条件下工作正常? 【参考方案1】:

Python 将\t 解释为字符串'tutorial\testData.tsv' 中的一个制表符。

正如您所发现的,您可以通过使用r"..." 将其指示为raw-string 来更改它,这意味着python 忽略反斜杠。

【讨论】:

非常感谢!好像就是这样!有趣的是测试您的建议,将'tutorial\testData.tsv' 替换为'tutorial\unlabeledTrainData.tsv' 并猜猜是什么原因,我遇到了SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 8-9: truncated \uXXXX escape 的另一个错误))然后我意识到现在路径字符串中的\u 被解释为特殊象征 。好的,无论如何,再次感谢您的帮助!【参考方案2】:

您是否尝试过使用完整路径? (从'C:\'开始)

【讨论】:

【参考方案3】:

试试这个方法。 test = pd.read_csv('tutorial\testData.tsv', header=0, delimiter=r'\t',quoting=3)

【讨论】:

以上是关于Pandas.read_csv() FileNotFoundError 即使文件存在的主要内容,如果未能解决你的问题,请参考以下文章

Pandas.read_csv() FileNotFoundError 即使文件存在

pandas.read_csv

对于循环不适用于 pandas.read_csv

pandas.read_csv() 部分参数解释

Pandas.read_csv 将所有文件读入一列

pandas.read_csv 来自字符串或包数据