我尝试将以下字符串连接到路径
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'
是否有更优雅的做法,因为我不想在开始时解析转发斜杠的所有标识符?
答案 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)