# -*- coding: utf-8 -*-
# !/usr/bin/env python
# Software: PyCharm
# __author__ == "YU HAIPENG"
# fileName: abs绝对路径解析.py
# Month: 五月
# time: 2021/5/22 20:39
""" Write an introduction to the module here """
import os
import platform
from re import compile
__all__ = ["main_path", "get_desktop", "get_home"]
split_reg = compile(r'[\\|/]')
def main_path(path: str):
"""
路径总函数
@param path:
@return:
"""
current_path = os.getcwd()
if path.startswith('..'):
path = _wne_path(_parse(path, current_path))
elif path.startswith('.'):
path = _wne_path(path[1:], current_path)
elif path:
path = _wne_path(path)
else:
raise ValueError('文件路径错误')
return path
def _parse(path: str, current_path):
"""
解析 .. 路径
:param path:
:param current_path:
:return:
"""
new_path_args = list(filter(lambda x: x != '', _get_path_params(path)))
row = 0
while row < len(new_path_args):
if new_path_args[row] == '..':
current_path = os.path.dirname(current_path)
new_path_args.remove(new_path_args[row])
row -= 1
else:
break
row += 1
return os.path.join(current_path, *new_path_args)
def _wne_path(new_path: str, current_path=None):
new_path_args = _get_path_params(new_path)
if current_path:
path = os.path.join(current_path, *new_path_args)
else:
sys_str = get_sys()
if sys_str == "Windows":
if new_path_args[0].find(':') != -1:
new_path_args[0] += os.sep
path = os.path.join(*new_path_args)
elif sys_str in ["Linux", "Mac", "Darwin"]:
if new_path_args[0] == '':
new_path_args[0] = os.sep
path = os.path.join(*new_path_args)
else:
path = new_path
return path
def get_sys():
"""
平台
@return:
"""
sys_str = platform.system()
return sys_str
def get_home(path='~'):
"""
家目录
@return:
"""
return os.path.expanduser(path)
def _get_path_params(path):
"""
路径参数
@param path:
@return:
"""
return split_reg.split(path)
def get_desktop():
"""
桌面路径
@return:
"""
return get_home(f"~{os.sep}DeskTop")