用斜杠将多个字符串连接到python中的路径
我尝试将以下字符串连接到路径用斜杠将多个字符串连接到python中的路径,python,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' 因为我不想在开头解析一个前向斜杠的所
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'
因为我不想在开头解析一个前向斜杠的所有标识符,有没有更优雅的方法呢?不指定任何分隔符不是关于
os.path
的全部内容吗
这个怎么样
import os
mr = "mapr"
cn = "12.12.12"
lp = ["data","dir"]
vin = "var"
os.path.join(mr, cn, *lp, vin)
这里的解决方案取决于上下文:您希望给用户多少权力?你相信他们会做出多少明智的贡献?结果是要获得相对路径还是绝对路径
- 选项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'
“/mapr12.12.12/data/dir/var”
。首先,为什么数据格式不正确(即绝对路径而不是相对路径)?这个问题可能应该在上游解决。我得到的数据部分是从配置文件中读取的,用户可能会错误地指定配置文件。当然可以清除所有读取的数据并删除第一个/但我正在寻找一个更优雅的solution@StefanPapp我不确定你认为什么是“优雅”在这里-如果输入数据是错误的,处理使它不那么错误通常会看起来有点“错”了。如果不允许某些路径为绝对路径,则始终可以var.lstrip(os.path.sep)
。不过,如果输入错误,你可能会做得最好,或者至少会发出一些警告,这样输入错误就不会被默默地忽略。