我一直在尝试锻炼霍克定律以及弹簧中距离和力之间的关系,但它通过以下代码给出了以下错误。请检查一下。
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'
答案 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