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'
网友评论