IOError:springData.txt

时间:2014-01-05 09:47:50

标签: python

我一直在尝试锻炼霍克定律以及弹簧中距离和力之间的关系,但它通过以下代码给出了以下错误。请检查一下。

def getData(fname):
f = open(fname, 'r')
x = []
y = []
for line in f:
  if line[0] == '#': continue
  line = line[:-1]
  elems = line.rsplit(':')
  x.append(float(elems[0]))
  y.append(float(elems[1]))
return pylab.array(x), pylab.array(y)

distances, forces = getData('springData.txt')
pylab.scatter(distances, forces)
pylab.xlabel('Distance (Meters)')
pylab.ylabel('|Force| (Newtons)')
pylab.title('Force vs. Distance for Spring')

pylab.show()

错误是:

 Traceback (most recent call last):
 Documents/python files/lec21.py", line 14, in <module>
distances, forces = getData('springData.txt')
Documents/python files/lec21.py", line 3, in getData
f = open(fname, 'r')
IOError: [Errno 2] No such file or directory: 'springData.txt' 

1 个答案:

答案 0 :(得分:0)

当您使用'springData.txt'作为文件名时,它表示“具有给定名称的当前工作目录中的文件”。

当前工作目录不是程序所在的目录 - 它是运行它的目录。通常(特别是对于小脚本),它们是相同的(在价值中,但从不在意义上),但总的来说 - 它们不是。

另外,你可以试试'./springData.txt',不幸的是,这意味着与没有“./".

的路径相同的东西。

要获取正在运行的程序的路径(在您的情况下为“lec21.py”的路径),您可以使用变量__file__ - 它包含使用它的模块的路径。

另外,在os.path中有一些非常酷的路径操作工具:

os.path.realpath(path) - 将任何相对路径转为绝对路径

os.path.dirname(file_path) - 返回存储指定文件的目录的路径(例如os.path.dirname("C:\x\y.txt")将返回"C:\x"

os.path.join(*args) - 加入参数以便它们形成路径,例如os.path.join("C:\x", "y", "z.txt")将返回"C:\x\y\z.txt"

现在,您可以获得springData.txt的绝对路径(假设它与您的脚本位于同一目录中):

os.path.realpath(
    os.path.join(
        os.path.dirname(__file__),
        "springData.txt"
    )
)

要了解相关信息,请查看官方文档: CLICK