当前位置: 首页 > news >正文

数据处理 |遍历所有文件夹及子目录文件夹方法总结与实例代码详解

深度学习中不可避免的数据预处理~

1. glob.glob()方法

2. pathlib中的Path方法

3. os.walk()方法

1. glob.glob()方法

语法

glob.glob(pathname)

(多指定文件类型,查找jpg,png,txt,json等)

缺点:查找文件较慢

2. 路径操作库pathlib中的Path方法

*大型项目常用

递归列出某类型文件

from pathlib import Pathtop_level_py_files = Path(".").glob("*.py")
all_py_files = Path(".").rglob("*.py")  # 递归print(list(top_level_py_files))
print(list(all_py_files))
# [WindowsPath('test.py')]
# [WindowsPath('test.py'), WindowsPath('src/config/submodule.py'), WindowsPath('src/config/__init__.py')]

打开多个文件并读取内容

glob

from glob import globcontents = []
for fname in glob("./**/*.py", recursive=True):with open(fname, "r") as f:contents.append(f.read())print(contents)

pathlib

from pathlib import Pathcontents = []
for fname in Path(".").rglob("*.py"):with open(fname, "r") as f:contents.append(f.read())print(contents)

操作符

使用/取代os.path.join创建子目录

from pathlib import Pathbase_dir = Path("src")
child_dir = base_dir / "config"
file_path = child_dir / "__init__.py"print(file_path)
# src\config\__init__.py

列出匹配的文件或目录 Path.glob()

from pathlib import Pathdir_path = Path("src/config/")
file_paths = dir_path.glob("*.py")print(list(file_paths))
# [WindowsPath('src/config/submodule.py'), WindowsPath('src/config/__init__.py')]

递归列出匹配的文件或目录 Path.rglob()

from pathlib import Pathdir_path = Path(".")
file_paths = dir_path.rglob("*.py")print(list(file_paths))
# [WindowsPath('test.py'), WindowsPath('src/config/submodule.py'), WindowsPath('src/config/__init__.py')]

列出路径下的文件和目录 Path.iterdir()

from pathlib import Pathbase_path = Path(".")
contents = [content for content in base_path.iterdir()]print(contents)
# [WindowsPath('.idea'), WindowsPath('file.txt'), WindowsPath('src'), WindowsPath('test.py')]

3.os

Path().iterdir():Path()返回一个WindowsPath对象,调用该对象的iterdir()方法,就可以返回一个迭代器,此迭代器包含该对象指定文件夹内的所有文件或文件夹的路径。不考虑嵌套文件夹中的文件。

Path().glob():Path()返回一个WindowsPath对象,调用该对象的glob()方法,就可以调用符合条件的所有文件或文件夹的路径,如果没有用**通配符,就不会涉及子层文件夹。

Path().rglob():Path()返回一个WindowsPath对象,调用该对象的rglob()方法,就可以调用所有当前对象指向文件夹以及所有子层文件夹下的符合条件的路径。

创建文件夹或多层嵌套文件夹

Path().mkdir(parents=False):Path()返回一个WindowsPath对象,调用该对象的mkdir()方法,就可以创建该对象指定的文件夹路径。

注意,该对象指定的文件夹路径一定要不存在才能调用这个方法,所以在调用前一般先调用exist()方法确认是否存在,只有返回结果为False才能继续。

parents参数默认是False,而如果设置为True,那么表示允许创建多层嵌套文件夹。

os.mkdir(path):传入一个path路径,创建单层(单个)文件夹;如果文件夹已经存在,就会报错。因此创建文件夹之前,需要使用os.path.exists(path)函数判断文件夹是否存在。

os.makedirs(path):传入一个path路径,创建一个多层嵌套文件夹;如果文件夹存在,就会报错。

4. os.walk()方法

语法

os.walk(top, topdown = True, onerror = None, followlinks = False)

返回:得到一个三元tupple(dirpath, dirnames, filenames),

第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。

dirpath 是一个string,代表目录的路径,

dirnames 是一个list,包含了dirpath下所有子目录的名字。

filenames 是一个list,包含了非目录文件的名字。

这些名字不包含路径信息,如果需要得到全路径,需要使用os.path.join(dirpath, name).

自下而上的深度优先遍历

  • os.listdir(path):传入任意一个path路径,返回的是该路径下所有文件和目录组成的列表

  • os.walk(path):传入任意一个path路径,深层次遍历指定路径下的所有子文件夹,返回的是一个由路径、文件夹列表、文件列表组成的元组

区别

WindowsPath对象和路径字符串的区别(拼接路径和上一级路径)
  • WindowsPath对象要拼接和扩展路径,直接用/'deep_path',而路径字符串需要用+'deep_path'或调用os.path.join()函数。

  • WindowsPath对象的上一级路径,需要调用parent属性;而路径字符串则是用/../来实现。

参考文献

【1】python-os模块、glob模块、pathlib、shutil模块之间的区别与辨析,文件及文件夹操作,python与操作系统文件系统的交互。_键盘即钢琴的博客-CSDN博客

【2】Python路径操作库pathlib,比os+glob+shutil更好用_XerCis的博客-CSDN博客_python 路径操作库

http://www.lryc.cn/news/23901.html

相关文章:

  • ProtoEditor - 如何在Unity中实现一个Protobuf通信协议类编辑器
  • 2022 OpenCV Spatial AI大赛前三名项目分享,开源、上手即用,优化了OAK智能双目相机的深度效果。
  • Android 蓝牙开发——HCI log 分析(二十)
  • flask入门-4.项目实战
  • java 1(概要、变量与运算符)
  • ​力扣解法汇总2363. 合并相似的物品
  • 2022年终总结-找回初心
  • Allegro如何打开或者关闭DFA规则设置操作指导
  • kind kubernetes 集群内如何通过 helm 部署定制化 Prometheus-Operator?
  • 流媒体付服务器 ZLMediaKit 学习记录
  • 2023年了还不会写软件测试简历吗,那就来看这里吧,怎么样才能更容易让HR看到你的简历
  • 第四阶段08-基于element-ui的vue2.0脚手架(续)
  • 数据库设计规范
  • 深入浅出PaddlePaddle函数——paddle.Tensor
  • docker删除已停止的容器
  • JS#1 引入方式和基础语法
  • 面了一个测试工程师,明显感觉他背了很多面试题...
  • C#生成缩略图
  • 算法 # SimHash 算法:文本相似度、文本去重、海量文本快速查询
  • Java程序设计-JSP程序设计-SSM校园二手交易系统
  • springBoot 消息转换器和自定义消息转换器
  • 机器学习笔记之流形模型——标准流模型基本介绍
  • MIT:只需一层RF传感器,就能为AR头显赋予“X光”穿透视力
  • 对 Dom 树的理解
  • 电商搜索入门
  • 4.3.1初阶数据结构(C语言)(无头不循环单链表)
  • 一文深度解读音视频行业技术发展历程
  • 面向对象拓展贴
  • Android仿QQ未读消息拖拽粘性效果
  • Linux 打包压缩解压指令 gzip bzip2 tar