【python学习】 os.path和glob中几个常用方法

【python】 os.path和glob中几个常用方法

博主最近在做毕业设计,python的使用频率直线上升,在使用过程中,也遇到各种坑,所以想主要是想记录一下经常使用到的一些方法,方便查阅~下面列举os.path中几个非常常用的方法:

  1. os.path.join()
  2. os.path.basename()
  3. glob.glob()

os.path.join()

该函数是对路径进行拼接,连接两个或者多个路径名,如果路径名的首字母不包含‘/’,则函数会自动加上,如果有一个路径是绝对路径,则在它之前所有的组件均会被舍弃,如果最后一个路径为空字符,则生成的路径以一个‘/’分隔符结尾。
测试代码:

import os
    p1 = "python"
    p2 = "learning"
    p3 = "a.txt"
    path0 = p1+p2+p3
    path = os.path.join(p1, p2, p3)
    print("+连接:",path0)
    print("join连接:",path)

输出:
输出

os.path.basename()

返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素。
测试代码:

import os
    path0 = "E:\\python\\learning\\demo"
    path = "E:\\python\\learning\\a.txt"
    result0 = os.path.basename(path0)
    result = os.path.basename(path)
    print("文件夹结尾:",result0)
    print("文件名结尾:",result)

结果:
结果2

glob.glob()

glob库是python的一个标准库,该模块主要是用作文件名匹配,不用遍历整个目录判断每个文件是否符合,特别快捷!glob.glob函数的参数是一个字符串,这个字符串类似于我们的正则表达式。下面举一个例子说明一下该函数的使用。

import glob
	# 获取该目录下的所有以png为后缀名的图片
	path = "E:\\python\\learning\\resource"
    listpng = glob.glob(os.path.join(path, "*.png"))

输出是一个list的,list里面的每一个值都是一个路径,如:

listpng = ['E:\\python\\learning\\resource\\1.png',
			'E:\\python\\learning\\resource\\2.png',
			'E:\\python\\learning\\resource\\3.png',
			'E:\\python\\learning\\resource\\4.png']

大概就是这样啦!词穷的理工科女,不会表达(哈哈哈)
参考文章:
https://www.cnblogs.com/an-ning0920/p/10037790.html

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个Python脚本,包含了三个自定义函数。下面逐一进行注释: ### 函数1:pre_data() ```python def pre_data(): root_path = '/data1/enhance/voice_bank/train' clean_paths = glob(f'{root_path}/_clean.wav') train_data = [] for clean_path in clean_paths: file_name = os.path.splitext(os.path.split(clean_path)[1])[0] noise_file = f'{root_path}/{file_name[:-6]}_noise.wav' if os.path.exists(noise_file): train_data.append([clean_path, noise_file]) return train_data ``` 该函数的作用是预处理音频数据,返回一个列表train_data,其每个元素都是一个包含两个路径的列表,第一个路径为干净音频文件的路径,第二个路径为带噪声的音频文件的路径。 具体实现过程: - 设置根路径为 '/data1/enhance/voice_bank/train'; - 使用glob模块查找干净音频文件的路径,存储在clean_paths列表; - 遍历clean_paths列表的每一个路径,提取出文件名(不包括后缀),然后添加 '_noise.wav' 后缀得到噪声音频文件的路径noise_file; - 如果噪声音频文件存在,则将干净音频文件路径和噪声音频文件路径组成一个列表,添加到train_data列表; - 最后返回train_data列表。 ### 函数2:chunks() ```python def chunks(arr_list, num): n = int(math.ceil(len(arr_list) / float(num))) return [arr_list[i:i + n] for i in range(0, len(arr_list), n)] ``` 该函数的作用是将一个列表切分成若干个子列表,每个子列表的长度为num。 具体实现过程: - 计算出每个子列表的长度n,使用math模块的ceil(上取整)函数实现; - 使用列表推导式将原列表arr_list切分成长度为n的若干个子列表,存储在一个新的列表; - 返回新的列表。 ### 函数3:load_frame() ```python def load_frame(path, frame_name='frame'): frame_names = {} for frame_name in glob(f'{path}/{frame_name}'): name = os.path.split(frame_name)[1] frame_names[int(name.split('')[-1])] = frame_name if len(sorted(frame_names)) == 0: return None, None else: frame_index = sorted(frame_names)[-1] return frame_names[frame_index], frame_index ``` 该函数的作用是在指定路径下加载最新的一个帧文件(即以'frame'开头的文件),返回帧文件的路径和文件名。 具体实现过程: - 使用glob模块查找以'frame'开头的文件的路径,并遍历所有这样的文件; - 从每个文件路径提取出文件名,然后提取出文件名的最后一个数字作为键,将该键和文件路径一起存储在一个字典frame_names; - 如果frame_names为空,则返回None, None; - 否则,将frame_names的键进行排序,取最大的一个键作为帧文件的索引frame_index; - 返回frame_names[frame_index]作为帧文件的路径,返回frame_index作为帧文件的文件名。 ### 函数4:delete_frame() ```python def delete_frame(path, frame_name='frame'): frame_names = {} for frame_name in glob(f'{path}/{frame_name}*'): name = os.path.split(frame_name)[1] frame_names[int(name.split('')[-1])] = frame_name for delete_key in sorted(frame_names)[:-5]: os.remove(frame_names[delete_key]) ``` 该函数的作用是在指定路径下删除最老的五个帧文件(即以'frame'开头的文件),并保留最新的五个帧文件。 具体实现过程: - 使用glob模块查找以'frame'开头的文件的路径,并遍历所有这样的文件; - 从每个文件路径提取出文件名,然后提取出文件名的最后一个数字作为键,将该键和文件路径一起存储在一个字典frame_names; - 对frame_names的键进行排序,然后从最小的一个键开始遍历,删除对应的帧文件,直到只剩下最新的五个帧文件为止。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值