Directorio de artículos
Prefacio
pathlib 和 os 是 Python 中用于处理文件路径和文件系统操作的两个模块。os 模块提供了底层的操作系统相关功能;pathlib 提供了面向对象的路径操作接口。pathlib 模块实际上是在 os 模块的基础上进行了封装和扩展,提供了更高级别的接口,以简化路径操作和文件系统访问(如同C++和C的关系)
1. Recorre los archivos en el directorio.
(1) El código de operación simple es el siguiente, solo para obtener todas las imágenes en la carpeta (incluidas todas las subcarpetas):
import os
from pathlib import Path
dir_path = "/path"
# 使用 os 模块
for root, dirs, files in os.walk(dir_path):
"""
root:正在遍历的文件夹路径
dirs:一个包含当前文件夹中所有子文件夹的列表
files:一个包含当前文件夹中所有文件名的列表
"""
for file in files:
print(os.path.join(root, file))
# 使用 pathlib 模块
for file in Path(dir_path).rglob("*"):
"""
rglob("*") 表示匹配当前目录及所有子目录中的任意文件或目录
"""
if file.is_file():
print(file) # 完整的绝对路径
# if file.is_dir():
# print("当前目录",file)
(2) Avanzado: escenario real: una carpeta de conjunto de datos contiene varias subcarpetas y cada subarchivo contiene tres carpetas: máscara, tren y val.
Durante la fase de entrenamiento, todas las imágenes del tren y las imágenes de máscara correspondientes deben leerse por separado. (Por lo general, el formato de imagen original es jpg y la imagen de máscara es png)
dir_path = r'C:/Users/Desktop/test'
dirs = []
for make_dir in Path(dir_path).glob("**"): # ** 表示匹配任意层级的子目录
# print(make_dir)
# print(make_dir.name) # 只读取最后一个目录,如mask,train,val
if make_dir.name == "train":
files = list(make_dir.glob("*.[jpb][nmp][pg]")) # 匹配满足文件扩展名为 ".jpg"、".png" 或 ".bmp" 的文件
dirs += files # 获取所有train文件夹里的图片
print(f'path:{
make_dir} filenumber:{
len(files)} all_files:{
len(dirs)}')
# i.parent.parent回到表示两层父级,如: C:/Users/Desktop/test/111
# i.with_suffix(".png").name表示将文件扩展名改为.png,再只保留name(图片名字)
mask_dir = [f'{
i.parent.parent / "mask" / i.with_suffix(".png").name}' for i in dirs]