自动化办公-Python-os模块的使用
os.path 模块的使用
在指定文件路径时,由于操作系统的差异,直接使用硬编码的路径可能会导致程序在不同平台上无法正常运行。为了解决这个问题,Python 提供了 os.path 模块,它包含了一系列用于路径操作的函数,可以帮助您以跨平台的方式处理文件路径。
为什么要使用 os.path 模块?
-
跨平台兼容性:不同的操作系统使用不同的路径分隔符,例如 Windows 使用反斜杠
\,而 Unix/Linux 和 macOS 使用正斜杠/。os.path模块会根据运行时的操作系统自动选择合适的路径分隔符。 -
简化路径操作:提供了丰富的函数用于路径拼接、分割、规范化等操作,避免手动处理路径字符串带来的错误。
os.path 模块的常用函数
-
os.path.join()-
功能:以正确的路径分隔符将一个或多个路径组件组合起来,形成一个完整的路径。
-
用法:
import os# 正确的用法 file_path = os.path.join('folder', 'example.txt') print(file_path) # 在 Windows 上输出 'folder\example.txt',在 Unix/Linux 上输出 'folder/example.txt'# 错误的用法(硬编码路径分隔符) file_path = 'folder/example.txt' # 在 Windows 上可能无法正确访问文件
-
-
os.path.abspath()-
功能:将相对路径转换为绝对路径。
-
用法:
import osrelative_path = 'folder/example.txt' absolute_path = os.path.abspath(relative_path) print(absolute_path) # 输出完整的绝对路径
-
-
os.path.dirname()和os.path.basename()-
功能:
os.path.dirname():获取路径中的目录部分。os.path.basename():获取路径中的文件名部分。
-
用法:
import ospath = '/home/user/documents/example.txt'directory = os.path.dirname(path) filename = os.path.basename(path)print(directory) # 输出 '/home/user/documents' print(filename) # 输出 'example.txt'
-
-
os.path.exists()-
功能:判断指定的路径是否存在。
-
用法:
import ospath = 'folder/example.txt'if os.path.exists(path):print('路径存在。') else:print('路径不存在。')
-
-
os.path.splitext()-
功能:将路径拆分为文件名和扩展名。
-
用法:
import ospath = 'folder/example.txt'root, ext = os.path.splitext(path) print(root) # 输出 'folder/example' print(ext) # 输出 '.txt'
-
-
os.path.split()-
功能:将路径拆分为目录和文件名。
-
用法:
import ospath = '/home/user/documents/example.txt'head, tail = os.path.split(path) print(head) # 输出 '/home/user/documents' print(tail) # 输出 'example.txt'
-
-
os.path.normpath()-
功能:规范化路径,消除冗余的分隔符和上层目录引用。
-
用法:
import ospath = 'folder//subfolder/../example.txt' normalized_path = os.path.normpath(path) print(normalized_path) # 输出 'folder/example.txt'
-
-
os.path.isabs()-
功能:判断路径是否为绝对路径。
-
用法:
import osprint(os.path.isabs('/home/user')) # 在 Unix/Linux 上返回 True print(os.path.isabs('C:\\Windows')) # 在 Windows 上返回 True
-
-
os.path.relpath()-
功能:计算从指定起始路径到目标路径的相对路径。
-
用法:
import ospath = '/home/user/documents/example.txt' start = '/home/user/'relative_path = os.path.relpath(path, start) print(relative_path) # 输出 'documents/example.txt'
-
处理操作系统差异
-
路径分隔符:
-
Windows:使用反斜杠
\,但在字符串中需要使用双反斜杠\\或者使用原始字符串r''。path = 'C:\\folder\\example.txt' # 或者 path = r'C:\folder\example.txt' -
Unix/Linux 和 macOS:使用正斜杠
/。
-
-
路径拼接:
-
推荐:使用
os.path.join()。import ospath = os.path.join('folder', 'subfolder', 'example.txt')
-
-
避免硬编码路径:不要直接在代码中写死完整的路径,应该使用相对路径或者配置文件。
使用示例
示例 1:跨平台的文件读取
import os# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))# 拼接文件路径
file_path = os.path.join(current_dir, 'data', 'example.txt')# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as f:content = f.read()print(content)
示例 2:检查文件或目录是否存在
import ospath = os.path.join('folder', 'example.txt')if os.path.isfile(path):print('这是一个文件。')
elif os.path.isdir(path):print('这是一个目录。')
else:print('路径不存在。')
示例 3:创建多级目录
import ospath = os.path.join('folder', 'subfolder')# 创建目录(如果目录不存在)
if not os.path.exists(path):os.makedirs(path)print('目录已创建。')
else:print('目录已存在。')
注意事项
-
避免硬编码路径分隔符:不要直接在路径中使用
'/'或'\',应该使用os.path.join()。# 错误的做法 path = 'folder/subfolder/example.txt' # 在 Windows 上可能出错# 正确的做法 path = os.path.join('folder', 'subfolder', 'example.txt') -
使用绝对路径:在需要明确指定文件位置时,使用绝对路径可以避免相对路径带来的不确定性。
import osabsolute_path = os.path.abspath('folder/example.txt') -
处理路径中的特殊字符:如果路径中包含空格、Unicode 字符等特殊字符,确保字符串编码正确,或使用原始字符串。
path = r'C:\Program Files\Example\example.txt' -
文件编码:在读取或写入文本文件时,明确指定编码格式(如
utf-8),以避免编码错误。with open(file_path, 'r', encoding='utf-8') as f:content = f.read() -
异常处理:在进行文件操作时,使用
try...except块捕获可能出现的异常,如文件未找到、权限不足等。try:with open(file_path, 'r', encoding='utf-8') as f:content = f.read() except FileNotFoundError:print('文件未找到。') except PermissionError:print('没有权限访问该文件。') except Exception as e:print(f'发生错误:{e}')
总结
-
os.path模块是处理文件路径的强大工具,可以帮助您编写跨平台的 Python 程序。 -
始终使用
os.path.join()等函数来拼接路径,以确保程序在不同操作系统上都能正确运行。 -
注意文件操作的异常处理和编码问题,以提高程序的健壮性和兼容性。
-
养成良好的编程习惯,避免硬编码路径和路径分隔符,使用相对路径或配置文件管理文件路径。
如果您对 os.path 模块的使用有任何疑问,或者需要进一步的示例和解释,请随时提问!
相关文章:
自动化办公-Python-os模块的使用
os.path 模块的使用 在指定文件路径时,由于操作系统的差异,直接使用硬编码的路径可能会导致程序在不同平台上无法正常运行。为了解决这个问题,Python 提供了 os.path 模块,它包含了一系列用于路径操作的函数,可以帮助您…...
无人机之数据处理技术篇
一、数据采集 无人机通过搭载的各种传感器和设备,如GPS、加速度计、陀螺仪、磁力计、激光雷达(LiDAR)、高光谱相机(Hyperspectral)、多光谱相机(Multispectral)以及普通相机等,实时采集飞行过程中的各种数据。这些数据包括无人机的位置、速度、高度、姿态…...
828华为云征文|部署多功能集成的协作知识库 AFFiNE
828华为云征文|部署多功能集成的协作知识库 AFFiNE 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 AFFiNE3.1 AFFiNE 介绍3.2 AFFiNE 部署3.3 AFFiNE 使用 四、…...
c++(AVL树及其实现)
一、AVL树的概念 AVL树是最先发明的自平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性质的⼆叉搜索树:它的 左右子树都是AV树,且左右子树的高度差的绝对值不超过1。AVL树是⼀颗高度平衡搜索⼆叉树, 通过控制高度差去控…...
Cesium GIS项目关于湖泊识别与提取的实现
1. 引言 项目背景 随着遥感技术的发展,地理信息系统的应用越来越广泛。本项目旨在开发一个基于Cesium的地理信息系统,利用深度学习技术自动识别并显示湖泊的位置。 目标与意义 通过自动化处理大量遥感影像数据,提高湖泊监测的效率和准确性,为水资源管理和环境保护提供支…...
两个圆形 一个z里面一个z外面,z里面的大,颜色不同 html
两个圆形 一个z里面一个z外面,z里面的大,颜色不同 html <!DOCTYPE html> <html> <head> <style> .outer-circle {width: 150px;height: 150px;border-radius: 50%;background-color: #ff9999; /* 外圆的颜色 */position: relat…...
【Power Query】M函数-table
M函数-table 添加列(AddColumn):条件语句(If..then..else):容错语句(try..otherwise): 排序(ReorderColumns):筛选(Selec…...
uni-app 封装websocket 心跳检测,开箱即用
class websocketUtils {constructor(url, needbeat, options {}) {this.needbeat needbeat;this.url url;this.options options;this.ws null;this.heartbeatInterval options.heartbeatInterval || 10000; // 心跳间隔,默认为10秒 this.reconnectInterval …...
ASP.NET Core8.0学习笔记(十九)——EF Core DbSet
一、DbSet概述 1.DbSet提供了通过DbContext对表进行查询操作的路径。DbSet对应的属性名称将默认映射为实体T的表名。 2.使用DbSet<T>进行查询的方法: (1)直接在DbContext中创建对应的DbSet<T>属性 (2)使用DbSet DbContext.Set<T>方法操作数据表。…...
Android Camera 预览角度和拍照保存图片角度相关
–基于Android R(11) 关于Camera Camera Framework 的架构 Android Camera Framework 是一个分层架构,由以下组件组成: HAL(硬件抽象层): HAL 抽象底层相机硬件,提供与不同设备相机进行交互的标准接口.CameraService : Camera…...
新手如何使用Qt——方法使用
前言 那么这篇文章其实是我在使用Qt的过程当中呢,我发现在Qt使用过程中,在我理解信号和槽这个概念后,在编写槽函数数的时候,发现了自身存在的问题,我的难点是在于当我在编写槽函数的时候,我知道这个槽函数是…...
友元运算符重载函数
目录 1.定义友元运算符重载函数的语法形式 2.双目运算符重载 3.单目运算符重载 1.定义友元运算符重载函数的语法形式 (1)在类的内部,定义友元运算符重载函数的格式如下: friend 函数类型 operator 运算符(形参表&a…...
从0开始实现es6 promise类
主要由基础实现和静态类的实现两部分组成。 1 基础实现(不含静态类) 1.1 使用类实现完成构造函数 实现代码如下,构造函数传入一个回调函数,定义resolve和reject函数,将两个函数作为参数执行回调函数。 // 1. 使用类实…...
XML 编码
XML 编码 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它由万维网联盟(W3C)开发,旨在提供一种标准的方式来结构化、存储和传输数据。XML的设计目标是既易于人类阅读,也易于机器解析。 XML的…...
AI周报(9.22-9.28)
AI应用-Siipet宠物沟通师 Siipet是一款由SiiPet公司推出的创新宠物行为分析相机,旨在通过尖端技术加深宠物与主人之间的情感联系。这款相机利用先进的AI算法,能够自动识别和分析家中宠物的行为,并提供定制化的护理建议。 SiiPet相机的核心功…...
基于RealSense D435相机实现手部姿态重定向
基于Intel RealSense D435相机和MediaPipe的手部姿态检测,进一步简单实现手部姿态与机器人末端的重定向,获取手部的6D坐标(包括位置和姿态)。 假设已经按照【基于 RealSenseD435i相机实现手部姿态检测】配置好所需的库和环境&…...
js中防抖 debounce 节流 throttle 原理 从0手动实现
1 防抖 高频触发事件时,执行损耗高的操作,连续触发过程中,只执行最后一次。 高频事件:input scroll resize等。损耗高:网络请求、dom操作。 实现防抖步骤:1.在回调函数中判断timer是否存在,存在…...
AIGC: 10 AI转文服务器的搭建过程记录
上图是台风席卷城市,现在企业的服务基本都是混合部署,云计算厂商的机房往往可以提供比较好的保护,一般在地下,扛多少级地震,扛多少级台风,而自建机房,往往写字楼经常停电,网络运营上…...
性能测试1初步使用Jmeter
当你看到这边文章的时候,详细你已经知道啥是性能测试,以及也听说过Jmeter了,所以不过多介绍,这里,只是帮助你快速的使用Jmeter来测试接口。 1获取安装包 官网下载地址:https://jmeter.apache.org/downloa…...
OpenGL ES 绘制一个三角形(2)
OpenGL ES 绘制一个三角形(2) 简述 本节我们基于Android系统,使用OpenGL ES来实现绘制一个三角形。在OpenGL ES里,三角形是一个基础图形,其他的图形都可以使用三角形拼接而成,所以我们就的案例就基于这个开始。 在Android系统中…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
