一、定义
os.path.join()函数:连接两个或更多的路径名分量,
- 使用说明:
- 如果各组件名首字母不包含’/’,则函数会自动加上’/’;详见2.1和2.2节
- 如果有一个组件是一个绝对路径,即带有‘/’,则在它之前的所有组件均会被舍弃;详见2.3节
- 如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾;详见2.4节
- 如果不显示地添加斜杠‘/’,那么程序会自动添加反斜杠‘\’;详见2.5节
- 要使用斜杠,就在所有路径的后面都添加上‘/’,否则会导致斜杠和反斜杠混乱!!详见2.6节
- 在Windows系统下,路径既可以使用斜杠连接,也可以使用反斜杠连接。
二、用法示例
2.1 如果各组件名首字母不包含’/’,则函数会自动加上’/’
import os
# 定义各个路径,不包含符号‘/’:各组件名首字母不包含'/',则os.path.join()函数会自动加上'/'
path1 = 'SRCNN'
path2 = 'experiments'
path3 = 'VDSR'
path4 = 'epochs'
path_1 = path1 + path2 + path3 + path4
path_2 = os.path.join(path1, path2, path3, path4)
print('path_1 = ', path_1)
print('path_2 = ', path_2)
- 输出
path_1 = SRCNNexperimentsVDSRepochs
path_2 = SRCNN\experiments\VDSR\epochs
2.2 各组件名首字母包含’/’的情况
path1 = '/SRCNN' # 修改之处,在第一个路径组件前面添加了斜杠
path2 = 'experiments'
path3 = 'VDSR'
path4 = 'epochs'
path_1 = path1 + path2 + path3 + path4
path_2 = os.path.join(path1, path2, path3, path4)
print('path_1 = ', path_1)
print('path_2 = ', path_2)
- 输出
path_1 = /SRCNNexperimentsVDSRepochs
path_2 = /SRCNN\experiments\VDSR\epochs
2.3 如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃;
import os
path1 = 'SRCNN'
path2 = '/experiments'
path3 = 'VDSR'
path4 = 'epochs'
path_1 = path1 + path2 + path3 + path4
path_2 = os.path.join(path1, path2, path3, path4)
print('path_1 = ', path_1)
print('path_2 = ', path_2)
- 输出
path_1 = SRCNN/experimentsVDSRepochs
# 舍弃了experiment之前的组件,即SRCNN
path_2 = /experiments\VDSR\epochs
2.4 如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾;
path1 = 'SRCNN'
path2 = 'experiments'
path3 = 'VDSR'
path4 = '' # 最后一个组件为空
path_1 = path1 + path2 + path3 + path4
path_2 = os.path.join(path1, path2, path3, path4)
print('path_1 = ', path_1)
print('path_2 = ', path_2)
- 输出
path_1 = SRCNNexperimentsVDSR
# 输出在路径末尾添加反斜杠
path_2 = SRCNN\experiments\VDSR\
2.5 如果不显示地添加斜杠‘/’,那么程序会自动添加反斜杠‘\’
# 没有显示添加斜杠
print(os.path.join('SRCNN', 'experiments', 'VDSR', 'epochs'))
# 输出为反斜杠‘\’连接的路径,清一色
SRCNN\experiments\VDSR\epochs
# 全部显示添加斜杠‘/’
print(os.path.join('SRCNN/', 'experiments/', 'VDSR/', 'epochs'))
# 输出位斜杠‘/’连接的路径
SRCNN/experiments/VDSR/epochs
2.6 错误的写法,即不符合路径的格式
# 部分显示添加斜杠
print(os.path.join('SRCNN', 'experiments', './VDSR'))
# 输出,混乱!!严禁这种写法
SRCNN\experiments\./VDSR
三、不良写法示例
# 不良写法习惯
os.path.join('/SRCNN','/experiment/epoch','/last_ckp.pth')
- 建议写法,将‘/’放在每个路径名组件的后面,即紧随其后!
# 建议写法
os.path.join('/SRCNN/','experiment/epoch/','last_ckp.pth')
# 输出
/SRCNN/experiment/epoch/last_ckp.pth