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