前言
还是linux下对路径进行处理的问题,因此我把处理归纳一下。对于路径,最棘手的其实无非是环境变量和各层相对路径,通过函数去除这些,最终处理为绝对路径。
代码处理
处理环境变量:
def replace_env_var(path):
def get_env(match):
return os.getenv(match.group(1))
path = re.sub(r"\$(\w+)", get_env, path)
return path
处理相对路径,有两种用法,一是把整个路径放在base里,直接转为直接路径;而是base放相对路径的基地址,offset放相对路径,最后得到一个完成路径,实际就是把拼接的工作交给函数自己完成了:
def replace_relative_path(base, offset=""):
if offset != "":
path = os.path.join(base, offset)
else:
path = base
path = re.sub(r"\/.\/\/", "//", path) # /path/./aaa -> /path//a
path = re.sub(r"\/+", "/", path) #/path///aa//b -> /path/a/b
while re.search(r"\w+\/\.\.\/", path):
path = re.sub(r"\w+\/\.\.\/", "",path) #/path/aa/../b -> /path/b
return path
借助这两个函数呢,可以直接拼成一个完成的函数:
def path_trans(path):
return replace_relative_path(replace_env_var(path))