文件未找到错误: [Errno 2] 没有这样的文件或目录

132

我正在尝试打开一个CSV文件,但是由于某些原因Python无法定位它。

这是我的代码(它只是一个简单的代码,但我无法解决这个问题):

import csv

with open('address.csv','r') as f:
    reader = csv.reader(f)
    for row in reader:
        print row

5
address.csv文件是否与你的Python(.py)代码在同一个文件夹中?你正在使用相对路径。如果不是,你需要提供完整路径,例如 C:\folder\folder\address.csv - Cory Kramer
如果您能够发布确切的错误信息,那么回答问题将会更容易。 - Srivatsan
4
@Cyber 文件与包含源代码的目录无关,而是与工作目录相关。尽管这些目录可能恰好相同,但精确性很重要。 - David Heffernan
我忘记写权限了,之后我添加了“wb”,现在正常工作了。谢谢。 - Saiful Islam
6个回答

154

当你以名称address.csv打开文件时,你告诉open()函数你的文件在当前工作目录中。这被称为相对路径。

为了让你了解这意味着什么,将以下内容添加到你的代码中:

import os

cwd = os.getcwd()  # Get the current working directory (cwd)
files = os.listdir(cwd)  # Get all the files in that directory
print("Files in %r: %s" % (cwd, files))

这将会输出当前工作目录以及其中所有的文件。

另一种告诉open()函数你的文件在哪里的方式是使用绝对路径,例如:

f = open("/Users/foo/address.csv")

好的回答!我有一个文件夹,里面还有一些文件夹,结果发现我想要读取的文件应该在第一个文件夹里,而不是其他文件夹里。因为你的评论,我才能找到它。 - Carlos Junior

37
您正在使用相对路径,这意味着程序会在工作目录中查找文件。错误提示您在工作目录中没有该名称的文件。
尝试使用准确或绝对路径。

1
好的,那行得通,但如果你想分发代码让别人使用呢?在那种情况下,你不能指望绝对路径能够正常工作,对吧? - Abhishta Gatya
2
@AbhishtaGatya,在这种情况下,您需要设置环境变量以读取当前工作目录! - Dr. Essen

20

对于那些即使传递了绝对路径仍然遇到错误的人,应该检查文件名是否有效。对我来说,我试图创建一个文件,文件名中带有“/”。一旦我删除了“/”,我就能成功创建该文件。


我的文件路径中有括号“()”和破折号“-”。这些会不会影响它的正常运行?然而,我无法更改文件路径的性质,因为它属于一个组织。你有什么想法吗? - Max Duso

8
with open(fpath, 'rb') as myfile:
    fstr = myfile.read()

我遇到这个错误是因为文件为空。这个答案可能不是针对这个问题的正确答案,但希望它能给你们一些提示。


1
使用精确路径。
import csv


with open('C:\\path\\address.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

5
你的意思是绝对路径应该总是被使用,而相对路径则不被使用吗? - David Heffernan
1
不,我认为最好使用绝对路径。如果脚本和输入文件都在同一个目录中,则相对路径应该可以工作。 - Dinesh Reddy
2
如果您希望路径是相对的,那么这并不是更好的选择。而且,它是相对于“工作目录”和脚本目录的。 - David Heffernan

1
假设我们有一个位于"c:\script.py"的脚本,其中包含:
result = open("index.html","r")
print(result.read())

假设index.html文件也在同一个目录下"c:\index.html",当我从cmd(或shell)执行脚本时。
C:\Users\Amine>python c:\script.py

您将会收到错误提示:

FileNotFoundError: [Errno 2] No such file or directory: 'index.html'

这是因为 "index.html" 文件不在工作目录中,而工作目录是 "C:\Users\Amine>"。所以为了让它正常工作,你需要更改工作目录。

C:\python script.py

'<html><head></head><body></body></html>'

这就是为什么最好使用绝对路径的原因。


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