定义
绝对路径
绝对路径是从文件系统根目录开始的完整路径,无论当前位置在哪里,都能准确定位到目标文件或目录。
Windows 系统示例:
D:\Project_File\YOLO_Project\YOLO8\recognition\test.py
C:\Users\username\Documents\file.txt
Linux/macOS 系统示例:
/home/user/projects/yolo/test.py
/usr/local/bin/python
相对路径
相对路径是相对于当前工作目录(CWD)的路径,不是从根目录开始,而是描述如何从"当前位置"到达目标位置。
示例:
./datasets/images.jpg # 当前目录下的datasets文件夹中的images.jpg
../data/config.yaml # 上一级目录的data文件夹中的config.yaml
images/cat.jpg # 当前目录下的images文件夹中的cat.jpg
适用场合
绝对路径适用场合
环境依赖程序:当程序需要在固定位置找资源时
config_file = "C:/ProgramData/App/config.ini"
系统级应用:操作系统服务、启动脚本等
log_file = "/var/log/app.log"
跨应用调用:从一个应用调用另一个应用时
subprocess.run(["D:/Program Files/App/executable.exe"])
配置文件中:确保无论从何处启动应用都能找到资源
相对路径适用场合
项目内部引用:使项目更易于移植
with open("data/input.txt", "r") as f:
content = f.read()
网站开发:网页中引用资源
<img src="../images/logo.png">
可移植应用:需要在不同环境间迁移的应用
config = load_config("./config.yml")
版本控制项目:便于多人协作开发
在Python中的特殊考虑
当前工作目录的问题
Python中,相对路径是基于"当前工作目录"(CWD),而不是基于脚本所在位置
"""如果在D:\Project_File运行test脚本:"""
python YOLO_Project\YOLO8\recognition\test.py
# 相对路径"./data.txt"指的是D:\Project_File\data.txt
"""如果在脚本目录下执行"""
cd D:\Project_File\YOLO_Project\YOLO8\recognition
python test.py
# 相对路径"./data.txt"指的是:\Project_File\YOLO_Project\YOLO8\recognition\data.txt
解决方案:使用脚本的相对路径(仍然是绝对路径),以下是一个例子:
"""目的:引用yolo的Model文件
首先,获取正在运行的脚本所在目录的绝对路径"""
script_dir = os.path.dirname(os.path.abspath(__file__))
"""其次,确认Model路径是否存在,如果存在则无反应,不存在就按照路径创建一个文件夹,如果省略这一步可能导致结果丢失:"""
os.makedirs(os.path.join(script_dir, "results"), exist_ok=True)
"""然后,定义Model的路径"""
model_path = os.path.join(script_dir, "weights", "yolov8x.pt")#相对于脚本的路径设置Model存放路径即"script_dir/weights/yolov8x.pt"
"""最后,进行Model的调用:"""
model = YOLO(model_path)
"""最后最后,不要忘记导入os库"""
这确保了无论从哪里执行脚本,都能正确找到相对于脚本的文件路径。
总结
绝对路径:稳定、准确,但不易移植
相对路径:易于移植,但依赖上下文