自动化办公-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 模块的使用有任何疑问,或者需要进一步的示例和解释,请随时提问!

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

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

相关文章

Python:lambda 函数详解 以及使用

一、lambda 语法 lambda 函数的语法只包含一个语句,表现形式如下: lambda [arg1 [,arg2,.....argn]]:expression 其中,lambda 是 Python 预留的关键字,[arg…] 和 expression 由用户自定义。 具体如下: [arg…] 是参数列表&#…

Java2 实用教程(第6版)习题2 第五题

五、编程题 1、编写一个应用程序,给出汉字“你”“我”“他”在Unicode表中的位置。 public class F2_1 {public static void main(String args[]){char ch1你,ch2我,ch3他;System.out.println("\""ch1"\"的位置"(int)ch1);System.…

Unity开发绘画板——01.前言

在做这个之前其实是想研究一下在Unity中交互雪的实现,交互雪顾名思义就是可以进行交互的雪,玩家角色从雪上走过时雪被踩凹陷的效果;交互雪的一种实现方案就是将地面看做一个画板,将玩家角色的躯体看做笔刷,将角色经过的…

钉钉如何请求webhook发送信息

代码:js const myHeaders new Headers(); myHeaders.append("Content-Type", "application/json");const raw JSON.stringify({"at": {"atMobiles": ["180xxxxxx"],"atUserIds": ["user123&qu…

我们是向量数据库的领军企业,我们只招TOP人才

我们是全球领先的向量数据库企业,业务正在快速发展,现开放大量岗位: 前端、产品经理、数据库开发工程师、C、数据库运维、数据库测试…… 我们招聘的唯一目标,寻找 TOP人才! 如果你已经有丰富的经验,那么加…

CMake set_property设置全局变量属性

在 CMake 中,set_property(GLOBAL PROPERTY LD_SCRIPT "路径") 是用来设置全局属性的。在你的例子中,它设置了一个名为 LD_SCRIPT 的全局属性,并将其值设为 "${NUTTX_BOARD_DIR}/scripts/gnu-elf.ld"。 具体解释&#x…

jmeter-请求参数加密-MD5加密

方法1 :使用jmeter自带的函数助手digest Tool(工具)---Function Helper Dialog(函数助手对话框) 第一个参数是要md5加密的值,第二个参数是保存加密后值的变量 ( 此处变量是从txt文件导入的,所以使用的是${wd} ) …

overlayscrollbars使用

官网 https://github.com/KingSora/OverlayScrollbars 使用 <link href"https://cdn.bootcdn.net/ajax/libs/overlayscrollbars/2.10.0/styles/overlayscrollbars.css" rel"stylesheet"> <script src"https://cdn.bootcdn.net/ajax/libs/…

Elasticsearch 中变更索引的方法

Elasticsearch 提供了几种方法来变更索引。以下是一些常用的方法&#xff1a; 1. 更新索引设置 可以使用 Update Index Settings API 来修改部分索引设置。例如: PUT /my-index/_settings {"index" : {"number_of_replicas" : 2} }2. 重新索引数据 使用…

OMRON欧姆龙E5GN温控器手测

OMRON欧姆龙E5GN温控器手测

17【Protues单片机仿真】基于51单片机的太阳能智能谷物翻晒机器人

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;避障&#xff0c;低于50CM报警&#xff0c;LED灯亮起&#xff0c;自动翻晒用光敏电阻&#xff0c;光照强度大&#xff0c;电机转动&#xff0c;相当于翻晒粮食&#xff0…

拿到一个新项目,如何开展测试

1. 拿到一个新的项目或者新的需求&#xff0c;首先需要搞清楚他的背景、目标和需求&#xff0c;这个过程需要和产品、开发、客户去沟通。 2. 清楚需求后&#xff0c;首先将业务流程走通&#xff0c;确保项目的基础功能是正常的 3. 根据项目需求明确测试的目标&#xff0c;如&…

【中间件——基于消息中间件的分布式系统的架构】

1. 基于消息中间件的分布式系统的架构 从上图中可以看出来&#xff0c;消息中间件的是 1&#xff1a;利用可靠的消息传递机制进行系统和系统直接的通讯 2&#xff1a;通过提供消息传递和消息的排队机制&#xff0c;它可以在分布式系统环境下扩展进程间的通讯。 1.1 消息中间件…

PostgreSQL的学习心得和知识总结(一百五十一)|[performance] PostgreSQL列对齐

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

算法题——滑动窗口(图示+代码)

什么时候可以使用滑动窗口&#xff1f; 当我们尝试对一条题目进行暴力插解时&#xff0c;若发现 一、长度最小的子数组 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程…

一个 Java 语言简化处理 PDF 的框架,提供了一套简单易用的 API 接口,满足多样化需求又能简化开发流程的处理方案(附教程)

前言 当前市面上处理 PDF 文件的工具众多&#xff0c;但它们往往存在一定的局限性&#xff0c;比如复杂交互、功能单一等问题。尤其对于那些需要频繁生成或编辑 PDF 文档的应用场景来说&#xff0c;找到一个既能满足多样化需求又能简化开发流程的处理方案显得尤为重要。那么&a…

借用连接2-得到主库或从库池子连接

二、借用连接--AbstractRoutingDataSource类 目的&#xff1a;基于look up data&#xff0c;然后从目标数据源借用连接 注look up key确定走主 or 从数据库连接池代码开发&#xff1a; 1.定义子类继承AbstractRoutingDataSource&#xff0c;并覆写determineCurrentLookupKey方…

【前端】ES13:ES13新特性

文章目录 1 类新增特性1.1 私有属性和方法1.2 静态成员的私有属性和方法1.3 静态代码块1.4 使用in来判断某个对象是否拥有某个私有属性 2 支持在最外层写await3 at函数来索引元素4 正则匹配的开始和结束索引5 findLast() 和 findLastIndex() 函数6 Error对象的Cause属性 1 类新…

Python 从入门到实战30(高级文件的操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了操作目录的相关知识。今天我们将学习一下高级文…

(SERIES13)基于DMASM的DMDSC搭建

1 集群规划 1.1 规划内容 在宿主机上创建磁盘映像、并使用该磁盘映像创建虚拟块设备&#xff0c;按照losetup -f可用顺序分别关联到loop0, loop1, loop2, loop3&#xff1b;也可以直接挂载四个云虚拟磁盘vdb, vdc, vdd, vde&#xff1b;   配置UDEV规则&#xff0c;通过.img…