美文网首页
python 路径处理

python 路径处理

作者: iterator_sl | 来源:发表于2018-04-01 18:13 被阅读0次

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

requirements python3.6+

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

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

cwd = os.getcwd()

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

# 的操作路径

cwd = pathlib.Path.cwd()         

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

.

├── ...

├── 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                    # 当前项目的路径

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

比如我们要获取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'

相关文章

网友评论

      本文标题:python 路径处理

      本文链接:https://www.haomeiwen.com/subject/qodacftx.html