代码之家  ›  专栏  ›  技术社区  ›  Stefan Papp

用斜线将多个字符串连接到python中的path

  •  5
  • Stefan Papp  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  2
  •   Aran-Fey Kevin    6 年前

    这里的解决方案取决于上下文:您希望给用户多少权力?你有多信任他们能提供合理的信息?结果是要得到相对路径还是绝对路径?

    • 选项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'
      
        2
  •  0
  •   Anton vBR    6 年前

    不是所有的事情 os.path 不指定任何分隔符?

    这个怎么样?

    import os
    
    mr = "mapr"
    cn = "12.12.12"
    lp = ["data","dir"]
    vin = "var"
    
    os.path.join(mr, cn, *lp, vin)