本文用于确定其他文件的相对路径
首先说结论:python代码在运行中,调用其他的文件时,寻找路径是以终端中的打开的文件夹为根路径,以此为基准去寻找其他文件,而不是以python代码所在的文件夹为根路径去寻找其他文件! 如果是在vscode中,那么根路径就是资源管理器中打开的最顶层的文件夹。
解释说明
下面举例来说明。
假设有如下的文件夹结构:
current
├── a
│ └── 1.py
└── b
└── 2.py
在终端中打开current
文件夹,下面的代码运行时都是以此文件夹为根路径。
错误示范
其中文件1.py
内容如下:
import os
print('================================')
print('file: 1.py')
print(os.getcwd()) # 获取当前目录
print(os.path.exists('../b/2.py'))
这时,在终端中打开current文件夹,即以current文件夹为根目录,运行1.py
,命令如下:
~/myCode/test/current$ python a/1.py
运行结果如下:
================================
file: 1.py
/home/ljw/myCode/test/current
False
发现当前目录并非1.py
所在的目录:current/a
,而是current
,即以终端中打开的文件夹为根目录。同时,寻找2.py
文件也是不存在的,因为根目录路径就错了。
正确姿势
这时把文件1.py
内容修改如下:
import os
print('================================')
print('file: 1.py')
print(os.getcwd()) # 获取当前目录
print(os.path.exists('b/2.py'))
再运行命令:
python a/1.py
输出如下:
================================
file: 1.py
/home/ljw/myCode/test/current
True
这时发现,可以找到文件2.py
了。
总结
在写python代码时,如果要调用其他文件,寻址路径应当以在终端中打开的文件夹为根路径,而不是以当前python文件所在的文件夹为根路径去寻找。