自动化办公-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系统中…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...