python abspath会处理.或..的路径标识_python 路径处理

python 路径处理主要用到的两个库 os.path and pathlib

requirements python3.6+

均按使用场景, 也就是常见使用方式分类, 不区分属性和方法

获取当前工作目录, 即运行python执行 *.py 文件(或编译出的二进制文件)所在的目录

cwd = os.getcwd()

# 实际上pathlib.Path.cwd() 方法返回的是一个path对象,该对象重载了 '/' 操作符, 可以方便直观

# 的操作路径

cwd = pathlib.Path.cwd()

获取当前项目的路径, 以下述目录结构为例

.

├── ...

├── docs # Documentation files (alternatively `doc`)

│ ├── index.md #

│ └── ... # etc.

├── resouces # Resource files (png, css, font, etc.)

│ ├── index.png # Background image

│ └── ... # etc.

├── scripts

│ ├── app.py # our demo scripts goes here

│ └── utils.py

└── ...

假设我们的入口脚本在 projects/scripts/app.py

os.path 的写法

# project/scripts/app.py

import os

# root path configuration

CURRENT_FILE_PATH = os.path.abspath(__file__) # 当前文件的路径

SCRIPTS_DIR_PATH = os.path.dirname(CURRENT_FILE_PATH) # scripts 文件夹的路径

PROJECT_PATH = os.path.dirname(SCRIPTS_DIR_PATH) # 当前项目的路径

pathlib 的写法

这里获取当前文件的路径我并没有找到太好的写法,所以使用了和os.path.abspath(file)相结合的办法,

如果有更好的实现,还请指教~~

实际上使用 pathlib.Path 这个类是为了生成的对象是一个path对象,而不仅仅是一个字符串,这样我们在操作路径的时候真正是在操作一个path, 可以方便的使用 pathlib.Path 定义的属性和方法

# project/scripts/app.py

import pathlib

# root path configuration

CURRENT_FILE_PATH = pathlib.Path(os.path.abspath(__file__)) # 当前文件的路径

SCRIPTS_DIR_PATH = CURRENT_FILE_PATH.parent # scripts 文件夹的路径

PROJECT_PATH = SCRIPTS_DIR_PATH.parent # 当前项目的路径

路径拼接, 仍以上述目录结构为例

比如我们要获取docs目录下的index.md, 以当前脚本 scripts/app.py来定位

这个时候就能看出pathlib的优势了

说到底os.path.join() 方法只是对字符串的拼接(加了对windowx和unix下文件定位符'', '/'的适配)

单纯使用join 方法对父级目录定位的时候会出现 '..' 这种比较丑的符号

而为了避免出现就要多次调用os.path.dirname()方法, 但是代码非常长,非常影响美观

# os.path

index_md_file_path = os.path.join(CURRENT_FILE_PATH, '..', 'docx', 'index.md')

index_md_file_path = os.path.join(

os.path.dirname(os.path.dirname(CURRENT_FILE_PATH)),

'docx',

'index.md')

# pathlib

index_md_file_path = CURRENT_FILE_PATH.parent.parent / 'docx' / 'index.md'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值