我在sublime Text2编辑python脚本程序,用ipython导入脚本模块,打开文件时总是报错,原来是路径问题
def file2matrix(filename):
fp = open(filename,'r')
datalines = fp.readlines()
lenlines = len(datalines)
dataSet = np.zeros((lenlines,3))
labels = []
index = 0
for line in datalines:
linelist = line.strip().split('\t')
dataSet[index,:] = linelist[0:3]
labels.append(int(linelist[-1]))
index = index + 1
fp.close()
return dataSet, labels
fp = open(filename, 'r')此处,执行当前脚本没问题,但是ipython里导入该模块后,工作目录为ipython所在目录,因此打开文件必定出错,
ipython导入自定义模块参考http://blog.csdn.net/hyholine/article/details/8581740
脚本文件和要打开的文件在同一个目录,因此我尝试fp = open(os.getcwd()+os.sep+filename,'r'),但是这样还是不行,原因是os.getcwd()
获取的是执行脚本的工作目录,即ipython工作目录;
在这篇博客终于找到方法http://blog.csdn.net/yuechuzhao/article/details/9329633,os.path[0]和os.argv[0]也没有获取到脚本所在目录,而是
工作目录,使用
os.path.split(os.path.realpath(__file__))[0]
最终获取到脚本文件目录,而不是工作目录
pathname = os.path.split(os.path.realpath(__file__))
fp = open(pathname[0]+os.sep+filename,'r')
在ipython里导入模块,调用该函数,打开文件成功,问题解决了。