0
点赞
收藏
分享

微信扫一扫

Python 获取路径相关的代码


在 运行,调试,打包成exe 三个不同场景下获取跟路径,用于解决获取资源文件绝对路径问题。

工具类代码如下:

import sys
import os
from functools import wraps

class ABSPath(object):
    """路径处理工具类"""

    @classmethod
    def project_asbpath(self):
        """获取当前项目目录"""
        project_asbpath = sys.path[1].replace("\\", "/")  # 获取当前项目目录,替换斜杠
        return project_asbpath

    @classmethod
    def dir_asbpath(self):
        """获取当前文件所在目录"""
        dir_asbpath = os.getcwd().replace("\\", "/")  # 获取当前文件所在目录,替换斜杠
        # dir_asbpath = sys.path[0].replace("\\", "/") # 获取当前文件所在目录,替换斜杠
        return dir_asbpath

    @classmethod
    def get_file_abspath(self, filepath):
        """使用相对路径拼接绝对路径"""
        return os.path.abspath(os.path.join(os.getcwd(), filepath)).replace("\\", "/")



# 当作装饰器函数来使用
def abspath(func):
    """装饰器函数,替换第一个参数[相对文件路径]为绝对文件路径"""
    @wraps(func)
    def decorate(*args, **kwargs):
        new_args = list(args)
        new_args[0] = ABSPath.get_file_abspath(new_args[0])
        new_args = tuple(new_args)
        return func(*new_args, **kwargs)
    return decorate

@abspath
def read_file_with_decorator(filename='./tr.txt',num=1):
    print('decorator:',filename,num)

def read_file_no_decorator(filename='./tr.txt',num=1):
    print('no decorator:',filename,num)



if __name__ == '__main__':
    """测试"""
    print(ABSPath.get_file_abspath(''))
    read_file_with_decorator('./tr.txt',10)
    read_file_no_decorator('./tr.txt',10)

获取当前文件的路径:

import os
import sys
import path

print('***获取当前目录***')
print(os.getcwd())
print(os.path.abspath(os.path.dirname(__file__)))
# __file__ 为当前文件, 如果在ide中运行此行会报错,可改为 path.dirname('.')
# 但是改为.后,就是获得当前目录,接着使用dirname函数访问上级目录


print('***获取上级目录***')
print(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
print(os.path.abspath(os.path.dirname(os.getcwd())))
print(os.path.abspath(os.path.join(os.getcwd(), "..")))


print('***获取上上级目录***')
print(os.path.abspath(os.path.join(os.getcwd(), "../..")))


print('***一些函数的使用***')
print('[sys.path]:',sys.path)
print("[sys.path[0]]:", sys.path[0])
print("[sys.path[1]]:", sys.path[1])
print('[path.Path]:',path.Path.getcwd())

参考:

https://www.jb51.net/article/170964.htm

举报

相关推荐

0 条评论