1、当咱们在进行文件操做的时候,首先得知道文件的具体位置才能利用内置函数open()打开,而文件的这个“位置”又有“绝对”与“相对”之分。python
咱们能够这样理解:文件的“绝对路径”绝大多数状况下只有在咱们本身的电脑上才有效,除非不一样的电脑里这两个文件存放的盘符与路径彻底一致。例如,张三作的一个项目里有一个名为whw.txt的文件存放着一些用户需求信息,该文件在张三电脑里的存放路径为:D:\user\whw.txt;有一天张三去忙另一个项目把现有的程序交给李四维护,一样的文件whw.txt在李四的电脑里存放的路径变成了E:\Python\exercise\ex11\whw.txt,若是程序里面还用张三以前的存放路径确定会报错。对于李四而言虽然只要将文件的存放路径按照张三以前的路径改动一下就能够了,可是,对于一个大项目有几十个甚至上百个文件、一个团队十几人共同维护代码的状况下,必须强制全部人都得按照一样的规范进行文件存放,这样势必给开发带来没必要要的冗余甚至麻烦。linux
2、而“相对路径”是解决这个问题的最好的方式,它并不纠结于文件具体的存放位置,只要先找到编程人员“源程序运行的位置”,而后在源程序的根目录下添加该文件相对于源程序的目录便可。具体操做方式以下:编程
如上图所示,咱们的源程序1.py有一个相同目录下的path文件夹里的rtr.txt文件须要操做。windows
首先,咱们利用os模块找到源程序的路径并将它赋值给变量BASE_DIR:函数
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
找到源程序在咱们本电脑的路径后,咱们只要把path文件夹里的rtr.txt文件再“追加”到这个存放着源程序目录的变量 BASE_DIR 后面便可:spa
_path_rtr1 = os.path.join(BASE_DIR,'path','rtr.txt')
程序的运行效果以下:操作系统
3、其实,关于相对路径的“追加”除了os.path.join()方法 以外还有一种方式,就拿上面的例子来说,咱们也能够这样追加:code
_path_rtr2 = BASE_DIR + r'\path\rtr.txt'
效果以下:blog
运行效果与os.path.join()方法一致。可是两者的区别又在哪里呢?ci
这与程序运行的操做系统有关。
咱们知道,文件在linux的目录格式为E:/practice/exercise/PRACTICE,而windows操做系统下的格式是:E:\practice]\exercise\PRACTICE。两者斜杠的方向不一样。很显然,若是咱们用第二种方式去追加文件的相对路径,该程序仅能在windows下运行,而第一种方式生成的路径会根据操做系统的不一样生成不一样的目录格式。咱们都知道python的一大优点即是“跨平台”,因此在实际中建议你们用os.path.join()方法去生成文件的相对路径。