深度学习中的Path问题

发布于:2024-07-05 ⋅ 阅读:(16) ⋅ 点赞:(0)

        在深度学习中涉及到诸多的模块与代码之间的相互调用,如果使用基础的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

你学到了嘛!!!


网站公告

今日签到

点亮在社区的每一天
去签到