深度学习中不可避免的数据预处理~
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 Path
top_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 glob
contents = []
for fname in glob("./**/*.py", recursive=True):
with open(fname, "r") as f:
contents.append(f.read())
print(contents)
pathlib
from pathlib import Path
contents = []
for fname in Path(".").rglob("*.py"):
with open(fname, "r") as f:
contents.append(f.read())
print(contents)
操作符
使用/取代os.path.join创建子目录
from pathlib import Path
base_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 Path
dir_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 Path
dir_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 Path
base_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 路径操作库