在深度学习中涉及到诸多的模块与代码之间的相互调用,如果使用基础的os.path来进行路径管理非常繁琐,所以在python3中一般使用自带的pathlib管理路径问题使得路径管理更加简单高效,下面介绍一些常用的Path方法,基本满足日常使用。
1. 提取文件名:
from pathlib import Path
img_path = Path(r"E:\pycharm\Retinex\result.jpg")
img_name = img_path.name
print(img_name)
输出:
result.jpg
2. 提取当前目录
注:__file__: 这是一个内置变量,包含当前正在执行的 Python 脚本的路径(相对路径或绝对路径,取决于执行方式)。
from pathlib import Path
cur_path = Path(__file__)
print(cur_path)
输出:
E:\pycharm\Retinex\test.py
3. 提取父目录
from pathlib import Path
img_path = Path(r"E:\pycharm\Retinex\result.jpg")
parent_path = img_path.parent
parents0_path = img_path.parents[0]
parents1_path = img_path.parents[1]
parents2_path = img_path.parents[2]
print(parent_path, parents0_path, parents1_path, parents2_path, sep = '\n')
输出:
E:\pycharm\Retinex
E:\pycharm\Retinex
E:\pycharm
E:\
4. 切换绝对路径
from pathlib import Path
img_path = Path(r"./result.jpg")
abs_path = img_path.resolve()
print(abs_path)
输出:
E:\pycharm\Retinex\result.jpg
5. 提取文件后缀
from pathlib import Path
img_path = Path(r"E:\pycharm\Retinex\result.jpg")
path_suffix = img_path.suffix
print(path_suffix)
输出:
.jpg
6. 无后缀文件名
from pathlib import Path
img_path = Path(r"E:\pycharm\Retinex\result.jpg")
dir_no_suffix = img_path.stem
print(dir_no_suffix)
输出:
result
7. 遍历文件
from pathlib import Path
file_path = Path(r"E:\pycharm\Retinex\some_result")
for path in file_path.iterdir():
print(path)
输出:
E:\pycharm\Retinex\some_result\10.png
E:\pycharm\Retinex\some_result\105.JPG
E:\pycharm\Retinex\some_result\105result.png
E:\pycharm\Retinex\some_result\106.JPG
E:\pycharm\Retinex\some_result\1078.jpg
8. 组合文件路径
from pathlib import Path
file_path = Path(r"E:\pycharm\Retinex")
img_path = file_path.joinpath(r"result.jpg")
print(img_path)
输出:
E:\pycharm\Retinex\result.jpg
9. 一些判断
.is_absolute() # 是否绝对路径
.is_dir() # 是否文件
.is_file() # 是否文件夹
.exists() # 是否存在
.isnumeric() # 是否由数字组成
.endswith(".streams") # 是否由".streams"结束
10. 匹配特定模式文件
from pathlib import Path
file_path = Path(r"E:\pycharm\Retinex\some_result")
for dir in file_path.glob("*.png"):
print(dir)
输出:
E:\pycharm\Retinex\some_result\10.png
E:\pycharm\Retinex\some_result\105result.png
E:\pycharm\Retinex\some_result\10_111.png
11. sys.path
很多时候都会将代码的根目录在sys.path中进行添加,因为在一个项目中,可能有多个子模块和子包。在没有将根目录添加到 sys.path
的情况下,从一个子模块导入另一个子模块可能需要使用相对导入,这会使导入语句变得复杂且难以维护。
加入之后的路径就在执行器的默认搜索路径中了,我们导入该文件目录下的文件就可以直接导入:
例如,假设项目结构如下:
project_root/
├── module1/
│ ├── __init__.py
│ └── submodule1.py
└── module2/
├── __init__.py
└── submodule2.py
如果你想在 module2/submodule2.py
中导入 module1/submodule1.py
,可以使用相对导入:
# 在 module2/submodule2.py 中
from ..module1 import submodule1
这种相对导入在复杂的项目中可能会变得混乱,并且在重构目录结构时容易出错。
通过将项目的根目录添加到 sys.path
,可以使用绝对导入,使代码更清晰和简洁:
# 在 module2/submodule2.py 中
from module1 import submodule1
你学到了嘛!!!