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

自动化办公-Python-os模块的使用

os.path 模块的使用


在指定文件路径时,由于操作系统的差异,直接使用硬编码的路径可能会导致程序在不同平台上无法正常运行。为了解决这个问题,Python 提供了 os.path 模块,它包含了一系列用于路径操作的函数,可以帮助您以跨平台的方式处理文件路径。


为什么要使用 os.path 模块?

  • 跨平台兼容性:不同的操作系统使用不同的路径分隔符,例如 Windows 使用反斜杠 \,而 Unix/Linux 和 macOS 使用正斜杠 /os.path 模块会根据运行时的操作系统自动选择合适的路径分隔符。

  • 简化路径操作:提供了丰富的函数用于路径拼接、分割、规范化等操作,避免手动处理路径字符串带来的错误。


os.path 模块的常用函数

  1. 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 上可能无法正确访问文件
      
  2. os.path.abspath()

    • 功能:将相对路径转换为绝对路径。

    • 用法

      import osrelative_path = 'folder/example.txt'
      absolute_path = os.path.abspath(relative_path)
      print(absolute_path)  # 输出完整的绝对路径
      
  3. 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'
      
  4. os.path.exists()

    • 功能:判断指定的路径是否存在。

    • 用法

      import ospath = 'folder/example.txt'if os.path.exists(path):print('路径存在。')
      else:print('路径不存在。')
      
  5. os.path.splitext()

    • 功能:将路径拆分为文件名和扩展名。

    • 用法

      import ospath = 'folder/example.txt'root, ext = os.path.splitext(path)
      print(root)  # 输出 'folder/example'
      print(ext)   # 输出 '.txt'
      
  6. 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'
      
  7. os.path.normpath()

    • 功能:规范化路径,消除冗余的分隔符和上层目录引用。

    • 用法

      import ospath = 'folder//subfolder/../example.txt'
      normalized_path = os.path.normpath(path)
      print(normalized_path)  # 输出 'folder/example.txt'
      
  8. os.path.isabs()

    • 功能:判断路径是否为绝对路径。

    • 用法

      import osprint(os.path.isabs('/home/user'))  # 在 Unix/Linux 上返回 True
      print(os.path.isabs('C:\\Windows')) # 在 Windows 上返回 True
      
  9. 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外面&#xff0c;z里面的大&#xff0c;颜色不同 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 添加列&#xff08;AddColumn&#xff09;&#xff1a;条件语句&#xff08;If..then..else&#xff09;&#xff1a;容错语句&#xff08;try..otherwise&#xff09;&#xff1a; 排序&#xff08;ReorderColumns&#xff09;&#xff1a;筛选&#xff08;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; // 心跳间隔&#xff0c;默认为10秒 this.reconnectInterval …...

ASP.NET Core8.0学习笔记(十九)——EF Core DbSet

一、DbSet概述 1.DbSet提供了通过DbContext对表进行查询操作的路径。DbSet对应的属性名称将默认映射为实体T的表名。 2.使用DbSet<T>进行查询的方法&#xff1a; (1)直接在DbContext中创建对应的DbSet<T>属性 (2)使用DbSet DbContext.Set<T>方法操作数据表。…...

Android Camera 预览角度和拍照保存图片角度相关

–基于Android R(11) 关于Camera Camera Framework 的架构 Android Camera Framework 是一个分层架构&#xff0c;由以下组件组成&#xff1a; HAL&#xff08;硬件抽象层&#xff09;: HAL 抽象底层相机硬件,提供与不同设备相机进行交互的标准接口.CameraService : Camera…...

新手如何使用Qt——方法使用

前言 那么这篇文章其实是我在使用Qt的过程当中呢&#xff0c;我发现在Qt使用过程中&#xff0c;在我理解信号和槽这个概念后&#xff0c;在编写槽函数数的时候&#xff0c;发现了自身存在的问题&#xff0c;我的难点是在于当我在编写槽函数的时候&#xff0c;我知道这个槽函数是…...

友元运算符重载函数

目录 1.定义友元运算符重载函数的语法形式 2.双目运算符重载 3.单目运算符重载 1.定义友元运算符重载函数的语法形式 &#xff08;1&#xff09;在类的内部&#xff0c;定义友元运算符重载函数的格式如下&#xff1a; friend 函数类型 operator 运算符&#xff08;形参表&a…...

从0开始实现es6 promise类

主要由基础实现和静态类的实现两部分组成。 1 基础实现&#xff08;不含静态类&#xff09; 1.1 使用类实现完成构造函数 实现代码如下&#xff0c;构造函数传入一个回调函数&#xff0c;定义resolve和reject函数&#xff0c;将两个函数作为参数执行回调函数。 // 1. 使用类实…...

XML 编码

XML 编码 XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言。它由万维网联盟&#xff08;W3C&#xff09;开发&#xff0c;旨在提供一种标准的方式来结构化、存储和传输数据。XML的设计目标是既易于人类阅读&#xff0c;也易于机器解析。 XML的…...

AI周报(9.22-9.28)

AI应用-Siipet宠物沟通师 Siipet是一款由SiiPet公司推出的创新宠物行为分析相机&#xff0c;旨在通过尖端技术加深宠物与主人之间的情感联系。这款相机利用先进的AI算法&#xff0c;能够自动识别和分析家中宠物的行为&#xff0c;并提供定制化的护理建议。 SiiPet相机的核心功…...

基于RealSense D435相机实现手部姿态重定向

基于Intel RealSense D435相机和MediaPipe的手部姿态检测&#xff0c;进一步简单实现手部姿态与机器人末端的重定向&#xff0c;获取手部的6D坐标&#xff08;包括位置和姿态&#xff09;。 假设已经按照【基于 RealSenseD435i相机实现手部姿态检测】配置好所需的库和环境&…...

js中防抖 debounce 节流 throttle 原理 从0手动实现

1 防抖 高频触发事件时&#xff0c;执行损耗高的操作&#xff0c;连续触发过程中&#xff0c;只执行最后一次。 高频事件&#xff1a;input scroll resize等。损耗高&#xff1a;网络请求、dom操作。 实现防抖步骤&#xff1a;1.在回调函数中判断timer是否存在&#xff0c;存在…...

AIGC: 10 AI转文服务器的搭建过程记录

上图是台风席卷城市&#xff0c;现在企业的服务基本都是混合部署&#xff0c;云计算厂商的机房往往可以提供比较好的保护&#xff0c;一般在地下&#xff0c;扛多少级地震&#xff0c;扛多少级台风&#xff0c;而自建机房&#xff0c;往往写字楼经常停电&#xff0c;网络运营上…...

性能测试1初步使用Jmeter

当你看到这边文章的时候&#xff0c;详细你已经知道啥是性能测试&#xff0c;以及也听说过Jmeter了&#xff0c;所以不过多介绍&#xff0c;这里&#xff0c;只是帮助你快速的使用Jmeter来测试接口。 1获取安装包 官网下载地址&#xff1a;https://jmeter.apache.org/downloa…...

OpenGL ES 绘制一个三角形(2)

OpenGL ES 绘制一个三角形(2) 简述 本节我们基于Android系统&#xff0c;使用OpenGL ES来实现绘制一个三角形。在OpenGL ES里&#xff0c;三角形是一个基础图形&#xff0c;其他的图形都可以使用三角形拼接而成&#xff0c;所以我们就的案例就基于这个开始。 在Android系统中…...

QT----Creater14.0,qt5.15无法启动调试,Launching GDB Debugger报红

问题描述 使用QT Creater 14.0 和qt5.15,无法启动调试也没有报错,加载debugger报红 相关文件都有 解决方案 尝试重装QT,更换版本5.15.2,下载到文件夹,shift鼠标右键打开powershell输入 .\qt-online-installer-windows-x64-4.8.0.exe --mirror http://mirrors.ustc.edu.cn…...

初试React前端框架

文章目录 一、React概述二、React核心特性1、组件化设计2、虚拟DOM3、生态系统 三、实例操作1、准备工作2、创建项目结构3、启动项目4、编写React组件5、添加React样式6、运行项目&#xff0c;查看效果 四、实战小结 一、React概述 大家好&#xff0c;今天我们将一起探索React…...

华为OD机试真题---手机App防沉迷系统

题目概述 智能手机在方便我们生活的同时&#xff0c;也侵占了大量时间。手机App防沉迷系统旨在帮助用户合理规划手机App使用时间&#xff0c;确保在正确的时间做正确的事。系统的主要功能包括&#xff1a; 在一天24小时内&#xff0c;可注册每个App的允许使用时段。一个时段只…...

物流货运托运发货单二联三联打印软件定制 佳易王物流单管理系统操作教程

一、前言 物流货运托运发货单二联三联打印软件定制 佳易王物流单管理系统操作教程 1、软件为绿色免安装版&#xff0c;解压即可使用&#xff0c;已经内置数据库&#xff0c;不需再安装。 2、软件下载可以到本文章最后点击官网卡片下。 二、软件程序教程 1、如图&#xff0c;…...

代码随想录算法训练营| 找树左下角的值 、 路径总和 、 从中序与后序遍历序列构造二叉树

找树左下角的值 题目 参考文章 思路&#xff1a;这里寻找最左下角的值&#xff0c;其实用前中后序都是可以的&#xff0c;只要保证第一遍历的是左边开始就可以。设置Deep记录遍历的最大深度&#xff0c;deep记录当前深度。当遇到叶子节点时而且当前深度比最大深度还大则更换最…...

【开源免费】基于SpringBoot+Vue.JS服装销售平台(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 054 &#xff0c;文末自助获取源码 \color{red}{T054&#xff0c;文末自助获取源码} T054&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

人工智能与自然语言处理发展史

前言 在科技的浪潮中&#xff0c;人工智能 (AI) 作为一股不可阻挡的力量&#xff0c;持续推动着社会与科技的进步。本博客旨在深入剖析人工智能及其核心领域——神经网络、自然语言处理、统计语言模型、以及大规模语言模型——的演进历程&#xff0c;以专业的视角展现这一领域…...

0基础跟德姆(dom)一起学AI 机器学习01-机器学习概述

【知道】人工智能 - Artificial Intelligence 人工智能 - AI is the field that studies the synthesis and analysis of computational agents that act intelligently - AI is to use computers to analog and instead of human brain - 释义 - 仿智&#xff1b; 像人…...

yakit使用教程(一,下载并进行基础配置)

一&#xff0c;yakit简介 YAKIT&#xff08;Yet Another Knife for IT Security&#xff09;是一款网络安全单兵工具&#xff0c;专为个人渗透测试员和安全研究人员设计。它整合了一系列实用的安全工具&#xff0c;例如密码破解工具、网络扫描器、漏洞利用工具等&#xff0c;帮…...

计算机毕业设计电影票购买网站 在线选票选座 场次订票统计 新闻留言搜索/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

系统功能 ‌在线选票选座‌&#xff1a;用户可浏览电影场次&#xff0c;选择座位并生成订单。‌场次订票统计‌&#xff1a;系统实时统计各场次订票情况&#xff0c;便于影院管理。‌新闻发布与留言‌&#xff1a;发布最新电影资讯&#xff0c;用户可留言互动。‌搜索功能‌&a…...