相对路径
相对路径基就是基于当前运行文件(当前的程序,高手都把程序叫做文件)路径进行目录索引。对于test1.txt和test2.txt文件进行读取该怎么做呢。
如下图所示:
.
|--dir1
|--main.py
|--dir2
|--func.py
|--test1.txt
|--dir3
|--test2.txt
test1.txt内容
test1.txt
test2.txt内容
test2.txt
1.若打开func.py文件,文件路径就是dir2目录下,通过func.py读取test1.txt可以用。输入如下语句:
func.py
# func.py
def load_txt(filename ):
return open(filename, 'r').read()
if __name__ == '__main__':
filename1 = '/test1.txt'
data1 = load_txt(filename1 )
filename2 = '/dir3/test1.txt'
data2 = load_txt(filename2 )
结果:
test1.txt
test2.txt
上面的代码是可以运行的,这是因为程序py文件比txt2文件目录高1级,和test1目录在同级,所以可以直接在func.py中使用open函数进行读取。
2.如打开main.py文件路径就是dir2目录下,通过main.py调用func.py,再读取test.txt,使用如下代码:
(为什么不直接读取呢?因为自己重新写读取文件有点浪费时间)
# main.py
from dir2 import func
if __name__ == '__main__':
filename1 = '/test1.txt'
data1 = load_txt(filename1 )
filename2 = '/dir3/test1.txt'
data2 = load_txt(filename2 )
上面的代码是会报错:
FileNotFoundError: [Errno 2] No such file or directory: '/test1.txt'
这是因为open函数'/'和'./'都是代表当前执行文件的路径(main.py),不是调用文件的路径。这里提示的'/test1.txt'是dir1中没有test1.txt文件。那怎么把dir2加到test1.txt文件目录中去呢??
这里介绍一种可以解决这个问题的方法,这是大家公认的可以解决这种问题的方法。修改func.py文件,main.py文件不需要修改,注意文件名前面不要加‘.’。
#func.py
import os
def load_txt(filename ):
module_path = os.path.dirname(__file__)
filename = module_path + filename
return open(filename, 'r').read()
if __name__ == '__main__':
filenam1 = '/test1.txt'
data1 = load_txt(filenam1 )
print(data1)
filenam2 = '/dir3/test2.txt'
data2 = load_txt(filenam2 )
print(data2)
相当于使用了绝对路径,在'/test1.txt',自动把当前执行文件路径加上了.
执行func.py时
module_path == '.../dir2'
执行main.py时
module_path == '.../dir1'
网友评论