python os库与应用(一)

一、介绍与一些路径基本符号

os即 operating system (操作系统),python 的os模块封装了常见的文件和目录操作

斜杠("/")是linux 系统下的路径分隔符,和反斜杠("\")是windows 系统下的路径分隔符。

os.path模块主要用于文件属性的获取

相对路径:用正斜杆'/'

先区分"./"、"../"、"/"等符号

"./":代表目前所在的目录

"../":代表上一层目录

"/":代表根目录

绝对路径:用反斜杠'\'

举例:C:\Users\23202\Desktop

绝对路径也可以用'\\'

举例:C:\\Users\\23202\\Desktop

一般来说 \\ 是用在C语言字符串中用作路径使用,由于"\"在C语言中表示转义字符,所以C语言中表示路径用"\\",

当然在C语言中也可以用"/"来表示路径,如绝对路径举例的第一种

二、一些os.path模块方法

1.os.path.exists(file_path)

使用方法:

它会返回是否存在该文件

2.os.makedirs(file_path)

使用方法:

os.mkdir()与os.makedirs(),os.mkdir()用于创建单层目录,os.makedirs()用于创建多层目录

举例:

text.txt文件夹不存在

在当前目录创建文件夹text.txt

在刚刚创建的text.txt文件夹里面创建1这个文件夹

在当前目录不存在的test文件夹中直接创建1文件夹

3.os.getcwd()

该函数不需要传递参数,它返回当前的目录。需要说明的是,当前目录并不是指脚本所在的目录,而是所运行脚本的目录。

4.os.path.join()

1)如果各组件名首字母不包含’/’,则函数会自动加上

2)第一个以“/”开头的参数开始拼接,之前的参数全部丢弃,当有多个时,从最后一个开始

3)如果最后一个组件为空,则生成的路径以‘/’分隔符结尾

对应举例:

1)

2)

3)

5.os.path.isdir()

作用:判断是否是路径,需要传入的参数是绝对路径

举例:

6.os.listdir()

用法:输出参数路径的文件和文件夹列表

三、实践(基于花数据集的划分代码)

import os
from shutil import copy, rmtree
import random
 
def mk_file(file_path: str):
    if os.path.exists(file_path):
        # 如果文件夹存在,则先删除原文件夹在重新创建
        rmtree(file_path)
    os.makedirs(file_path)
 
def main():
    # 保证随机可复现
    random.seed(0)
    # 将数据集中10%的数据划分到验证集中
    split_rate = 0.1
    # 指向你解压后的flower_photos文件夹
    cwd = os.getcwd()   # 获得当前所运行脚本路径
    data_root = os.path.join(cwd, "flower_data")
    origin_flower_path = os.path.join(data_root, "flower_photos")
    # assert用来检查文件夹是否存在,不存在就输出后面语句"path '{}' does not exist.".format(origin_flower_path)
    # 这里不存在就会报错path...\flower_data\flower_photos does not exist 存在就继续正常运行
    assert os.path.exists(origin_flower_path), "path '{}' does not exist.".format(origin_flower_path)
    # 遍历花图片所在目录下文件,判断是否是目录,建立目录列表
    flower_class = [cla for cla in os.listdir(origin_flower_path)
                    if os.path.isdir(os.path.join(origin_flower_path, cla))]
    # 建立保存训练集的文件夹
    train_root = os.path.join(data_root, "train")
    mk_file(train_root)  # 创建文件夹
    for cla in flower_class:
        # 建立每个类别对应的文件夹
        mk_file(os.path.join(train_root, cla))
    # 建立保存验证集的文件夹
    val_root = os.path.join(data_root, "val")
    mk_file(val_root)
    for cla in flower_class:
        # 建立每个类别对应的文件夹
        mk_file(os.path.join(val_root, cla))
    for cla in flower_class:
        cla_path = os.path.join(origin_flower_path, cla)
        images = os.listdir(cla_path)  # 返回每一个花类图片文件索引列表
        num = len(images)  # 该列表长度,也即图片数量
        # 随机采样验证集的索引
        # sample(lisk, k)返回一个长度为list的新列表,列表里面为图片对应索引
        eval_index = random.sample(images, k=int(num*split_rate))
        # 分配该花类别的每一张图片
        for index, image in enumerate(images):
            if image in eval_index:
                # 将分配至验证集中的文件复制到相应目录
                image_path = os.path.join(cla_path, image)
                new_path = os.path.join(val_root, cla)  # 验证集中花类的路径
                copy(image_path, new_path)  # 把图片复制到验证集
            else:
                # 将分配至训练集中的文件复制到相应目录
                image_path = os.path.join(cla_path, image)
                new_path = os.path.join(train_root, cla)   # 训练集中花类的路径
                copy(image_path, new_path)  # 把图片复制到训练集
            print("\r[{}] processing [{}/{}]".format(cla, index+1, num), end="")  # processing bar
        print()
    print("processing done!")
 
if __name__ == '__main__':
    main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值