保存模型时想用一个软链接指向最新的 checkpoint 文件。python 创建软链接用 os.symlink,算两个路径之间的相对路径用 os.path.relpath。但要注意在算相对路径时,起始的路径应是一个文件夹,而不是文件,否则会多一个 ../ 前缀导致错误。
Example
- 用
os.path.relpath算相对路径指定start时,对 destination link file(的绝对路径)用一次os.path.dirname; - 在 windows 创文件夹的软链接时,要设
target_is_directory=True; - 删文件夹软链接的方法参考 [1,2]。
import os
# 例 1:源文件、软链接在不同目录
f = os.path.expanduser("~/data/NCR-data.tar")
link_f = os.path.expanduser("~/codes/test-data.tar")
print(os.path.relpath(f, start=link_f)) # ../../data/NCR-data.tar
os.symlink(os.path.relpath(f, start=link_f), link_f) # 错
print(os.path.relpath(f, start=os.path.dirname(link_f))) # ../data/NCR-data.tar
os.symlink(os.path.relpath(f, start=os.path.dirname(link_f)), link_f) # 对
# 例 2:源文件、软链接在同一目录
f = os.path.expanduser("~/codes/test.pth")
link_f = os.path.expanduser("~/codes/latest-model.pth")
print(os.path.relpath(f, start=link_f)) # ../test.pth
os.symlink(os.path.relpath(f, start=link_f), link_f) # 错
print(os.path.relpath(f, start=os.path.dirname(link_f))) # test.pth
os.symlink(os.path.relpath(f, start=os.path.dirname(link_f)), link_f) # 对
# 例 3: 文件夹
d = os.path.expanduser("~/data/cityscapes")
link_d = os.path.expanduser("~/codes/test-dir")
print(os.path.relpath(d, link_d)) # ../../data/cityscapes
os.symlink(os.path.relpath(d, link_d), link_d, target_is_directory=True) # 错
print(os.path.relpath(d, os.path.dirname(link_d))) # ../data/cityscapes
os.symlink(os.path.relpath(d, os.path.dirname(link_d)), link_d, target_is_directory=True) # 对
本文介绍了如何在Python中使用os.symlink创建软链接,以及注意在计算相对路径时,起点必须是文件夹而非文件。针对不同情况,如不同目录下的文件、同一目录内的文件和文件夹,提供了正确的路径处理方法。
1万+

被折叠的 条评论
为什么被折叠?



