python中打开相对路径文件

相对路径

相对路径基就是基于当前运行文件(当前的程序,高手都把程序叫做文件)路径进行目录索引。对于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'

你可能感兴趣的:(python中打开相对路径文件)