使用斜杠将多个字符串连接到python中的路径

时间:2018-06-06 18:03:04

标签: python

我尝试将以下字符串连接到路径

mr = "/mapr"
cn = "12.12.12"
lp = "/data/dir/"
vin = "var"
os.path.join(mr, cn, lp, vin)

导致

'/data/dir/var'

为了达到预期的结果,我需要删除变量lp中的第一个正斜杠

lp = "data/dir/"
os.path.join(mr, cn, lp, vin)

'/mapr/12.12.12/data/dir/var'

是否有更优雅的做法,因为我不想在开始时解析转发斜杠的所有标识符?

2 个答案:

答案 0 :(得分:2)

此处的解决方案取决于具体情况:您希望为用户提供多少功率?你有多信任他们输入合理的东西?您希望获得相对路径或绝对路径的结果吗?

  • 选项1:为用户提供支持

    让用户做任何他们想做的事情,让他们自己负责做到这一点:

    result = os.path.join(mr, cn, lp, vin)
    # result: '/data/dir/var'
    

    这为用户提供了最大程度的控制。

  • 选项2:强制一切为相对

    如果要强制每个单独的段都是相对路径,则无法剥离任何前导路径分隔符。

    seps = r'\/'  # backslash for windows, slash for all platforms
    fragments = [part.strip(seps) for part in [mr, cn, lp, vin]]
    result = os.path.join(*fragments)
    # result: 'mapr/12.12.12/data/dir/var'
    

    如果您需要将结果作为绝对路径,请将其与根目录连接:

    seps = r'\/'
    root = '/var/log'
    fragments = [part.strip(seps) for part in [mr, cn, lp, vin]]
    result = os.path.join(root, *fragments)
    # result: '/var/log/mapr/12.12.12/data/dir/var'
    

答案 1 :(得分:0)

关于os.path不是指定任何分隔符的全部内容吗?

这个怎么样?

import os

mr = "mapr"
cn = "12.12.12"
lp = ["data","dir"]
vin = "var"

os.path.join(mr, cn, *lp, vin)