Python数据分析【第6天】| os模块、glob模块

系列文章目录

第1天:读入数据
第2天:read()、readline()与readlines()
第3天:进度条(tqdm模块)
第4天:命令行传参(argparse模块)
第5天:读、写json文件(load()、loads()、dump()、dumps())



前言

数据分析的过程中,我们难免会遇到需要处理某个文件夹内的大量数据文件的情况,这时我们就要先获得每个文件的路径,而这就可以用到我们今天所讲的两个python模块。

一、今天所学的内容

今天讲得内容是python的 os 模块和 glob 模块。只需初步的掌握这两个模块的基本操作,我们就可以在用python处理大量文件和路径时如鱼得水。

二、python知识点详解

首先还是加载模块

import os
import glob

首先来说os模块,这里只介绍我常用到的几个功能:

  • os.path.exists():用于判断某个路径(文件或文件夹)是否存在,若存在则返回True,若不存在则返回False。
  • os.makedirs():用于创建文件夹。传入所欲创建的文件夹的路径即可,没有返回值。值得一提的是,这个函数可以实现目录的递归创建,也就是说如果所传入的路径中,倒数第二级的目录也不存在,那么就会先创建该级目录,然后在在目录下创建所欲创建的目录,依此类推。
# 如果 my_dir 不存在,就创建该目录
my_dir = '/home/wang/my_data'
if not os.path.exists(my_dir):
	os.makedirs(my_dir)
  • os.path.basename():传入一个文件的路径,返回该文件的文件名。
  • os.path.dirname():与 os.path.basename() 相反,返回的是文件所在的目录的路径。
img_path = '/home/wang/my_data/imgs/a.png'
img_name = os.path.basename(img_path)
img_dir = os.path.dirname(img_path)
# img_name = 'a.png'
# img_dir = '/home/wang/my_data/imgs'
# 若所传入地址为文件夹地址,例如 img_path = '/home/wang/my_data/imgs'
# 则 img_name = 'imgs' , img_dir = '/home/wang/my_data'
  • os.path.join(a, b, c, …):将所传入的若干个路径按照参数的先后顺序拼接为一个路径。可能有人会说,本质上路径 a 和 b 都是一个字符串,使用 a + b 也可以达到同样的效果,但 os.path.join() 的好处就在于,它可以自动帮我们处理一些关于路径中的 / 的问题,具体见下面的例子。
my_dir = '/home/wang/my_data'
img_path = 'imgs/a.png'
new_path = os.path.join(my_dir, img_path)
# new_path = '/home/wang/my_data/imgs/a.png'
# 此处如果用 new_path = my_dir + img_path,则 new_path = '/home/wang/my_dataimgs/a.png',显然是不对的。

关于glob模块,我平时只用它做一个用途——列出某目录下的所有符合要求的文件。还是举个例子来说明吧,假设 img_dir 目录下有两个后缀为 .png 的图片,分别是 a.pngb.png 。而我们想列出 img_dir 目录下所有png文件的路径,应该怎么写呢?让我们顺便来复习一下刚才学过的 os.path.join() 操作:

img_dir = '/home/wang/my_data/imgs'
png_files = glob.glob(os.path.join(img_dir, '*.png'))
# 输出结果为 png_file = ['/home/wang/my_data/a.png', '/home/wang/my_data/b.png']
  • 输入:这里首先经过 os.path.join() 对地址进行拼接之后,实际传给 glob.glob() 的内容是 '/home/wang/my_data/.jpg’* ,也就是一个关于路径的正则表达式。
  • 输出:返回的 png_files 是一个 list ,其中的每个元素是一个符合所传入的正则表达式的路径。

这样我们就可以轻松地获取我们所关心的文件的所有路径啦~

总结

今天的内容算是一个基础知识点,之前没有讲到,就算是查漏补缺了,最近事情比较多,保持更新不易,希望大家能多多点赞支持一下。那今天就到这里啦,祝大家变得更强,明天见!

今天的小tips:

  • 平心静气,步步为营。进一寸便有一寸的欢喜。

Guess you like

Origin blog.csdn.net/FANFANHEBAOER/article/details/117428413