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