15. Python中的os.path模块/路径操作相关

这个专栏记录我学习/科研过程中遇到的一些小问题以及解决方案,一些问题可能比较蠢请见谅。自用,仅供参考。


------------------------------------------------------------------------------------

Python中的os.path模块详解(包括一些常用的路径操作相关操作)


文章目录

  • Python中的os.path模块详解(包括一些常用的路径操作相关操作)
  • 1. 路径拼接与分割
    • ☆1.1 os.path.join(*paths):路径拼接
    • ☆1.2 os.path.split(path):路径分割
    • ☆1.3 os.path.splitext(path):路径与扩展名分割
    • ☆1.4 path.strip('/').split('/'):以"/"分割路径
  • 2. 路径信息获取
    • ☆2.1 os.path.exists(path):检查路径是否存在
    • 2.2 os.path.getsize(path):获取文件/目录大小
    • 2.3 os.path.isfile(path):检查是否为文件
    • 2.4 os.path.isdir(path):检查是否为目录
    • ☆2.5 os.getcwd():获取当前工作目录
    • ☆2.6 str.endswith(A) / str.startswith(B):字符串是否以A结尾 / B开头
  • 3. 路径信息提取
    • 3.1 os.path.abspath(path):提取路径的绝对路径
    • 3.2 os.path.basename(path):提取路径中最后一个部分
    • 3.3 os.path.dirname(path):提取文件所在的目录
    • 3.4 os.path.commonprefix(paths):提取公共前缀
  • 4. 路径规范化
    • 4.1 os.path.realpath(sympath):解析符号链接,返回真实路径
    • 4.2 os.path.normpath(path):消除路径冗余
  • 5. 路径操作
    • ☆5.1 os.walk(path):遍历某个路径下的所有子目录和文件(遍历所有)
    • ☆5.2 os.listdir(path):列出当前目录下的所有文件和子目录名称(仅当前路径下)
    • ☆5.3 os.makedirs(path):递归创建目录
    • 5.4 os.rename(path):重命名
    • 5.5 shutil.rmtree(path):删除目录树(包括path本身)
    • 5.6 os.remove(path):删除文件
  • 6. 获取目录结构
    • ☆6.1 【bash】tree path:以树状图的方式列出目录结构

os.path是Python标准库中用于处理和操作文件路径的模块。它提供了一个平台无关的接口,用于常见的文件和目录路径操作,如路径拼接、查询文件类型、获取文件信息等。os.path模块可以在不同操作系统(如 Windows、Linux、macOS)上兼容与文件路径操作相关的代码,各个操作系统上的差异非常小(例如路径分隔符的不同等)。

以下是os.path一些常用函数的总结,包括使用场景与案例(注意,所有的案例均在Linux操作系统上)。除此之外,一些与路径操作相关的函数(例如os.walk等)也同样纳入总结:

1. 路径拼接与分割


☆1.1 os.path.join(*paths):路径拼接

功能:将多个路径组件合成一个路径。

import os
path = os.path.join('folder', 'subfolder', 'file.txt')
print(path)  # 输出 'folder/subfolder/file.txt'

☆1.2 os.path.split(path):路径分割

功能:将路径分割成目录部分和文件名部分(注意,并不是将路径按“/”进行分割!)。

head, tail = os.path.split('/folder/subfolder/file.txt')
print("目录:", head)  # 输出 '/folder/subfolder'
print("文件名:", tail)  # 输出 'file.txt'

☆1.3 os.path.splitext(path):路径与扩展名分割

功能:分割文件路径为根路径和扩展名。

root, ext = os.path.splitext('file.txt')
print("文件名:", root)  # 输出 'file'
print("扩展名:", ext)  # 输出 '.txt'

☆1.4 path.strip(‘/’).split(‘/’):以"/"分割路径

功能:以“/”来分割路径,比如将’/folder/subfolder/file.txt’分割为[‘folder’、‘subfolder’、‘file.txt’]。

import os
path = "/data1/abc/123/assets/"
parts = path.strip('/').split('/')
print(parts)  # 输出['data1', 'abc', '123', 'assets']

注意,strip(‘/’)用于去除路径首尾的 /,因为 split() 方法按每个 / 进行分割,而如果路径以 / 开头,分割出来的第一个元素会是空字符串。所以通过 strip(‘/’) 去除前后的 / 以避免这种情况。另外,split() 方法的输出为列表


2. 路径信息获取


☆2.1 os.path.exists(path):检查路径是否存在

功能:检查路径是否存在,返回 True 或 False。

import os
if os.path.exists('file.txt'):print("文件存在")
else:print("文件不存在")

2.2 os.path.getsize(path):获取文件/目录大小

功能:返回文件或目录的大小(以字节为单位)。

import os
size = os.path.getsize('/data1/dyz/ffmpeg/')
print(f"文件大小: {size} 字节")  # 输出:文件大小: 4096 字节

2.3 os.path.isfile(path):检查是否为文件

功能:检查给定路径是否是文件(而不是一个目录),返回 True 或 False。

import os
if os.path.isfile('file.txt'):print("这是一个文件")

2.4 os.path.isdir(path):检查是否为目录

功能:检查给定路径是否是目录(而不是一个文件),返回 True 或 False。

import os
if os.path.isdir('folder'):print("这是一个目录")

☆2.5 os.getcwd():获取当前工作目录

功能:获取当前工作目录(即正在执行脚本的目录)。

import os
current_directory = os.getcwd()
print("当前工作目录:", current_directory)

☆2.6 str.endswith(A) / str.startswith(B):字符串是否以A结尾 / B开头

功能:检查字符串是否以某个字符串结尾或开头,在筛选文件时尤其有用。 例如下面给出了一个案例,统计某一路径下的所有文件,找出以 “.pt” 结尾的文件和以 “test” 开头的文件。

import os
current_directory = os.getcwd()
print("当前工作目录:", current_directory)

在这里插入图片描述


3. 路径信息提取


3.1 os.path.abspath(path):提取路径的绝对路径

功能:提取某一路径的绝对路径,或将相对路径转换为绝对路径。

import os
abs_path = os.path.abspath('file.txt')
print(abs_path)  # 输出文件的绝对路径

3.2 os.path.basename(path):提取路径中最后一个部分

功能:提取路径的最后一个部分(文件名或目录名)。

import os
basename = os.path.basename('/folder/subfolder/file.txt')
print(basename)  # 输出 'file.txt'

3.3 os.path.dirname(path):提取文件所在的目录

功能:提取路径中的目录部分(最后一个部分之前的内容)。

import os
dirname = os.path.dirname('/folder/subfolder/file.txt')
print(dirname)  # 输出 '/folder/subfolder'

3.4 os.path.commonprefix(paths):提取公共前缀

功能:提取路径列表中所有路径的公共前缀部分(注意,paths是路径列表)。

import os
common = os.path.commonprefix(['/folder/subfolder/file1.txt', '/folder/subfolder/file2.txt'])
print(common)  # 输出 '/folder/subfolder/'

4. 路径规范化


4.1 os.path.realpath(sympath):解析符号链接,返回真实路径

功能:解析符号链接,获取实际的文件路径(注意,sympath为符号链接)。

import os
real_path = os.path.realpath('symlink_to_file.txt')
print(real_path)  # 输出真实文件路径

4.2 os.path.normpath(path):消除路径冗余

功能:规范化路径,消除多余的分隔符或上级目录。

import os
path = os.path.normpath('/folder//subfolder/../file.txt')
print(path)  # 输出 '/folder/file.txt',消除了多余的分隔符和上级目录

5. 路径操作


我们以下面这样一个目录为例进行展示:

在这里插入图片描述

☆5.1 os.walk(path):遍历某个路径下的所有子目录和文件(遍历所有)

功能:递归遍历指定目录下的所有目录和文件,并返回每个目录中的文件名。

os.walk()是一个生成器,它会递归遍历指定目录下的所有目录和文件,并返回每个目录中的文件名。它会生成一个三元组(dirpath, dirnames, filenames),其中:

dirpath:当前目录的路径。
dirnames:当前目录下的子目录列表。
filenames:当前目录下的文件列表。

import os
directory = '/data1/dyz/Gaitcode/'
# 使用 os.walk() 遍历目录及其子目录
for dirpath, dirnames, filenames in os.walk(directory):print("以下为目录{}的所有子目录和文件。".format(dirpath))for dirname in dirnames:subdir_path = os.path.join(dirpath, dirname)  # 找到每个子目录的名称print("子目录名称:", subdir_path)for filename in filenames:file_path = os.path.join(dirpath, filename)  # 找到每个文件的名称print("文件名称:", file_path)print("-------------------------------------------")

结果如下:

在这里插入图片描述


☆5.2 os.listdir(path):列出当前目录下的所有文件和子目录名称(仅当前路径下)

功能:返回指定路径下的文件和目录的名称列表(注意,返回的是一个按字母顺序排列名称的列表,不包含路径)。但不会在更下一级目录中查找,即不会遍历查找。

import os
directory = '/data1/dyz/Gaitcode/'
contents = os.listdir(directory)
print(contents)
# 这段代码将返回:['cal_acc.py', 'test_2024-09-11-02-53-18.log', 'model', 'test.sh', 'answer_list.csv', 
# 'common.py', 'main.py', 'config.py', 'train.sh', 'work']

☆5.3 os.makedirs(path):递归创建目录

功能:递归创建目录。如果父目录不存在,则会创建它们。虽然 os.mkdir(path) 也可以创建目录,但当目录层级较多且可能父目录不存在时,更推荐使用 os.makedirs(path) 来创建目录。

import os
os.makedirs('/data1/dyz/Gaitcode/child', exist_ok=True)

5.4 os.rename(path):重命名

功能:重命名文件或目录。

import os
os.rename('/data1/dyz/Gaitcode/child', '/data1/dyz/Gaitcode/newchild')

5.5 shutil.rmtree(path):删除目录树(包括path本身)

功能:直接删除整个目录树(包括所有文件和子目录),不需要自己手动递归删除,适合用于清空整个目录。

import shutil
dir = '/data1/dyz/Gaitcode/newchild/'
shutil.rmtree(dir)  # 谨慎操作!

5.6 os.remove(path):删除文件

功能:删除某一文件。

import os
os.remove('/path/to/file')

6. 获取目录结构


☆6.1 【bash】tree path:以树状图的方式列出目录结构

功能:Linux 系统自带 tree 命令,可以非常方便地生成目录结构的树状图。

tree /path/to/your/folder

如果希望导出为.txt文件:

tree /path/to/your/folder > directory_tree.txt

结果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/474784.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙实战:页面跳转传参

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙项目2.2 编写首页代码2.3 新建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 本次实战,学习如何在HarmonyOS应用中实现页面间参数传递。首先创建项目,编写首页代码,实现按钮跳转至第二个页面并…

NLP论文速读(EMNLP 2024)|动态奖励与提示优化来帮助语言模型的进行自我对齐

论文速读|Dynamic Rewarding with Prompt Optimization Enables Tuning-free Self-Alignment of Language Models 论文信息: 简介: 本文讨论的背景是大型语言模型(LLMs)的自我对齐问题。传统的LLMs对齐方法依赖于昂贵的训练和人类偏好注释&am…

Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪

这里写目录标题 1.目标检测 Detection2.实例分割 segment3.图像分类 classify4.关键点估计 Keypoint detection5.视频帧检测 video detect6.视频帧分类 video classify7.旋转目标检测 obb detect8.替换yolo11模型 给我点个赞吧,谢谢了附录coco80类名称 笔记本 华为m…

图像处理学习笔记-20241118

文章目录 霍夫变换基本原理霍夫变换的步骤使用 OpenCV 实现直线检测示例:标准霍夫变换 示例:概率霍夫变换参数解释霍夫变换检测圆 基于GAN的样本生成GAN的基本原理基于GAN的数据增广流程实现代码示例 同态滤波(Homomorphic Filtering&#xf…

视频融合×室内定位×数字孪生

随着物联网技术的迅猛发展,室内定位与视频融合技术在各行各业中得到了广泛应用。不仅能够提供精确的位置信息,还能通过实时视频监控实现全方位数据的可视化。 与此同时,数字孪生等技术的兴起为智慧城市、智慧工厂等应用提供了强大支持&#…

当科技照进现实 机器人带着机器狗乘空轨

湖北日报讯(记者魏铼、通讯员张璨龙)11月14日,武汉东湖高新区空轨高新大道站,在光谷装上“智慧大脑”的人形机器人,乘空轨,看AI展,与小朋友在生态大走廊斗舞。 京天博特:光谷“智慧大…

freertos任务调度学习

首先创建任务,创建好任务后,开启任务调度器,任务才能执行 1.开启任务调度器 2.启动第一个任务 3.任务切换

蓝桥杯每日真题 - 第16天

题目:(卡牌) 题目描述(13届 C&C B组C题) 解题思路: 题目分析: 有 n 种卡牌,每种卡牌的现有数量为 a[i],所需的最大数量为 b[i],还有 m 张空白卡牌。 每…

MySQL系列之数据授权(privilege)

导览 前言Q:如何对MySQL数据库进行授权管理一、MySQL的“特权”1. 权限级别2. 权限清单 二、授权操作1. 查看权限2. 分配权限3. 回收权限 结语精彩回放 前言 看过博主上一篇的盆友,可以Get到一个知识点:数据授权(eg:g…

C++为函数提供的型特性——缺省参数与函数重载

目录 一、缺省参数 二、函数重载 一、缺省参数 C为函数提供了一项新的特性——缺省参数。缺省参数指的是当前函数调用中省略了实参自动使用的一个值。这极大地提高了函数的灵活性 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值 。在调⽤该函数时,如果没有…

android 使用MediaPlayer实现音乐播放--权限请求

在Android应用中,获取本地音乐文件的权限是实现音乐扫描功能的关键步骤之一。随着Android版本的不断更新,从Android 6.0(API级别23)开始,应用需要动态请求权限,而到了android 13以上需要的权限又做了进一步…

go-zero(一) 介绍和使用

go-zero 介绍和使用 一、什么是 go-zero? go-zero 是一个基于 Go 语言的微服务框架,提供了高效、简单并易于扩展的 API 设计和开发模式。它主要目的是为开发者提供一种简单的方式来构建和管理云原生应用。 1.go-zero 的核心特性 高性能: g…

Orcad 输出有链接属性的PDF

安装adobe pdf安装Ghostscript修改C:\Cadence\SPB_16.6\tools\capture\tclscripts\capUtils\capPdfUtil.tcl ​ 设置默认打印机为 Adobe PDF ​ 将Ghostscript的路径修改正确 打开cadence Orcad ,accessories->candece Tcl/Tk Utilities-> Utilities->PD…

.NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】

一、使用VSCode开发.NET项目 1、创建文件夹,使用VSCode打开 2、安装扩展工具 1>C# 2>安装NuGet包管理工具,外部dll包依靠它来加载 法1》:NuGet Gallery,注意要启动科学的工具 法2》NuGet Package Manager GUl&#xff0c…

#define定义宏(3)

大家好,今天来给大家介绍一下宏实现的原理以及缺点,还有宏和函数的一些区别(下一期给大家详细介绍宏和函数的区别),那么话不多说,我们现在开始。 1.宏和参数不是计算之后传进去,而是替换进去的…

AJAX笔记 (速通精华版)

AJAX(Asynchronous Javascript And Xml) 此笔记来自于动力节点最美老杜 传统请求及缺点 传统的请求都有哪些? 直接在浏览器地址栏上输入URL。点击超链接提交 form 表单使用 JS 代码发送请求 window.open(url)document.location.href urlwi…

3D Gaussian Splatting 代码层理解之Part2

现在让我们来谈谈高斯分布。我们已经在Part1介绍了如何根据相机的位置获取 3D 点并将其转换为 2D。在本文中,我们将继续处理高斯泼溅的高斯部分,这里用到的是代码库 GitHub 中part2。 我们在这里要做的一个小改动是,我们将使用透视投影,它利用与上一篇文章中所示的内参矩阵…

【YOLOv8】安卓端部署-2-项目实战

文章目录 1 准备Android项目文件1.1 解压文件1.2 放置ncnn模型文件1.3 放置ncnn和opencv的android文件1.4 修改CMakeLists.txt文件 2 手机连接电脑并编译软件2.1 编译软件2.2 更新配置及布局2.3 编译2.4 连接手机 3 自己数据集训练模型的部署4 参考 1 准备Android项目文件 1.1…

进程其他知识点

/* #include <stdlib.h> void exit(int status); #include <unistd.h> void _exit(int status); status 参数&#xff1a;是进程退出时的一个状态信息。父进程回收子进程资源的时候可以获取到。 */ #include <stdio.h> #include <stdlib.h> #include &…

深度解析FastDFS:构建高效分布式文件存储的实战指南(上)

文章目录 一、FastDFS简介1.1 概述1.2 特性 二、FastDFS原理架构2.1 FastDFS角色2.2 存储策略2.3 上传过程2.4 文件同步2.5 下载过程 三、FastDFS适用场景四、同类中间件对比4.1 FastDFS和集中存储方式对比4.2 FastDFS与其他文件系统的对比 五、FastDFS部署5.1 单机部署5.1.1 使…