【Python基础】一文搞懂:Python中文件路径的处理方式

文章目录

    • 1 引言
    • 2 os 模块
      • 2.1 常用函数
      • 2.2 示例
    • 3 pathlib 模块
      • 3.1 常用类和方法
      • 3.1 示例
    • 4 比较 os 和 pathlib
    • 5 实例演示
      • 5.1 使用 os 模块
      • 5.2 使用 pathlib 模块
      • 5.3 封装为pathlib_example.py脚本
    • 6 结语

1 引言

在 Python 编程中,正确处理文件路径是一个常见且重要的任务。无论是数据分析、文件操作还是系统编程,高效且准确地处理文件路径都至关重要。Python 提供了多个内置模块来简化文件路径的处理,包括 ospathlib 模块。本文将深入探讨这些模块的使用方法,帮助你轻松掌握文件路径的处理技巧。

2 os 模块

os 模块是 Python 的标准库之一,提供了丰富的方法来处理文件和目录。

2.1 常用函数

  • os.path.join(): 连接路径部分
  • os.path.basename(): 获取路径的基本名称
  • os.path.dirname(): 获取路径的目录名
  • os.path.split(): 分割路径的目录名和基本名称
  • os.path.abspath(): 获取绝对路径
  • os.path.exists(): 检查路径是否存在
  • os.path.isfile(): 检查路径是否为文件
  • os.path.isdir(): 检查路径是否为目录

2.2 示例

import os# 路径拼接
path = os.path.join('/path/to', 'file.txt')# 获取基本名称和目录名
basename = os.path.basename(path)
dirname = os.path.dirname(path)# 获取绝对路径
abs_path = os.path.abspath(path)

3 pathlib 模块

pathlib 模块是 Python 3 中引入的现代文件路径处理库。它提供了面向对象的接口来处理文件路径。

3.1 常用类和方法

  • Path(): 创建 Path 对象
  • Path.joinpath(): 连接路径
  • Path.name: 获取路径的基本名称
  • Path.parent: 获取路径的父目录
  • Path.resolve(): 获取绝对路径
  • Path.exists(): 检查路径是否存在
  • Path.is_file(): 检查路径是否为文件
  • Path.is_dir(): 检查路径是否为目录

3.1 示例

from pathlib import Path# 创建 Path 对象
path = Path('/path/to') / 'file.txt'# 获取基本名称和父目录
name = path.name
parent = path.parent# 获取绝对路径
abs_path = path.resolve()

4 比较 os 和 pathlib

尽管 os 模块在 Python 中的使用历史更长,但 pathlib 提供了更现代、更直观的 API。对于 Python 3 项目,建议使用 pathlib

  • os: 提供了更多与操作系统交互的功能,适用于需要执行系统命令和环境变量操作的场景。
  • pathlib: 提供了更优雅的面向对象接口,代码可读性更好。

5 实例演示

为了更好地理解这些概念,让我们通过一个实战示例来展示 ospathlib 在文件路径处理中的应用。

5.1 使用 os 模块

假设我们需要遍历一个目录,列出其中所有的文件和子目录:

import osdef list_directory(path):
for name in os.listdir(path):
full_path = os.path.join(path, name)
if os.path.isfile(full_path):
print(f"File: {full_path}")
elif os.path.isdir(full_path):
print(f"Directory: {full_path}")list_directory('/your/path/here')

5.2 使用 pathlib 模块

同样的任务,使用 pathlib 模块来实现:

from pathlib import Pathdef list_directory(path):
base_path = Path(path)
for entry in base_path.iterdir():
if entry.is_file():
print(f"File: {entry.resolve()}")
elif entry.is_dir():
print(f"Directory: {entry.resolve()}")list_directory('/your/path/here')

在这两个例子中,我们展示了如何遍历一个目录并根据每个条目的类型(文件或目录)打印出相应的信息。这两种方法虽然功能相同,但 pathlib 提供的面向对象的方式使得代码更加简洁和易读。

通过这些示例和概念的阐述,您应该能够更加自信地在 Python 中处理文件路径。无论您是初学者还是有经验的开发者,掌握这些技能都将对您的项目开发大有裨益。

以下是一个 Python 脚本示例,该脚本使用 pathlib 模块来展示不同的文件路径处理应用场景。我们将包括文件的创建、路径的拼接、文件的读写、检查文件属性等功能。这些操作被封装在一个名为 pathlib_example.py 的 Python 文件中。

5.3 封装为pathlib_example.py脚本

from pathlib import Pathdef create_file(file_path):
""" 创建文件并写入内容 """
file_path.write_text("Hello, this is a test file.")def read_file(file_path):
""" 读取文件内容 """
return file_path.read_text()def append_to_file(file_path, content):
""" 向文件追加内容 """
with file_path.open(mode='a') as file:
file.write(content)def file_properties(file_path):
""" 打印文件的一些属性 """
print(f"File Name: {file_path.name}")
print(f"Is File: {file_path.is_file()}")
print(f"File Size: {file_path.stat().st_size} bytes")def main():
# 创建一个文件路径对象
file_path = Path('test_file.txt')# 创建并写入文件
create_file(file_path)
print(f"Created file '{file_path.name}'")# 读取文件内容
content = read_file(file_path)
print(f"Content:\n{content}")# 向文件追加内容
append_to_file(file_path, "\nThis is additional text.")
print("Appended content to the file.")# 再次读取内容
updated_content = read_file(file_path)
print(f"Updated Content:\n{updated_content}")# 获取文件属性
file_properties(file_path)if __name__ == "__main__":
main()

运行脚本

运行 pathlib_example.py 脚本,您将看到以下输出结果:

Created file 'test_file.txt'
Content:
Hello, this is a test file.
Appended content to the file.
Updated Content:
Hello, this is a test file.
This is additional text.
File Name: test_file.txt
Is File: True
File Size: 52 bytes

脚本解释

这个脚本首先创建一个新的文本文件 test_file.txt,并写入一些基本内容。然后,它读取并打印文件内容。接着,向文件追加额外的内容,并再次读取并打印更新后的内容。最后,它打印出文件的一些属性,如文件名、是否是文件和文件大小。

pathlib 模块的使用使得处理文件和目录的操作更加直观和易于理解,而且代码更加简洁。通过这个例子,您可以看到在实际应用中如何利用这些技巧来操作文件和目录。

6 结语

掌握文件路径的处理对于任何涉及文件操作的 Python 程序来说都是必不可少的。无论您选择 os 模块还是 pathlib 模块,都可以高效且准确地完成路径处理任务。


希望这篇文章能帮助您理解和掌握 Python 中文件路径的处理方法。如果您有任何疑问或建议,请在评论区留言,让我们共同进步!

作者:climber1121
链接:https://blog.csdn.net/climber1121
来源:CSDN
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。


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

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

相关文章

【GitHub项目推荐--克隆你的声音】【转载】

今天推荐一个黑科技开源项目,只需要你 5 秒钟的声音对话,就能克隆出你的声音,而且能够实时的生成你任意语音。 是不是很顶? 我举个例子,如果我这里有 300 条你说话的语音,我把你的语音数据用这个开源项目…

为求增长,这家消金公司也开始发力小微

来源 | 镭射财经(leishecaijing) 消金公司业务转向,小微贷越来越香,已成消金行业近年转型奋进的一个插曲。 为求业绩增长,拓宽获客基数,越来越多的消金公司不再局限于单一的C端客群,将目光瞄向…

Android jar包编译及集成

Jar包编译和集成有两种编译方式,mk和bp,Android 7版本之后逐渐采用bp格式编译,目前14版本还是兼容mk方式编译,具体写法入下: Android jar包编译 mk: 如果需要打包到systemimg,则需要将此jar包添…

MOJO基础语法

文章目录 打印变量及方法声明结构体python集成 打印 print("Hello Mojo!")变量及方法声明 变量: 使用’ var ‘创建一个可变的值,或者用’ let 创建一个不可变的值。 方法: 方法可以使用python中的def 方法声明,也引…

vue组件中data为什么必须是一个函数?

在Vue组件中,data为组件的私有数据对象,每个实例都必须要有自己独立的数据对象。为了确保每个实例都有独立的数据对象,Vue规定data必须是一个函数,而不是一个简单的对象。 当data是一个简单的对象时,所有组件的实例会…

认知觉醒(九)

认知觉醒(九) 专注力——情绪和智慧的交叉地带 第一节 情绪专注:一招提振你的注意力 用元认知来观察自己的注意力是一件很有意思的事情,相信你可以轻易观察到这种现象:身体做着A,脑子却想着B。 跑步的时候,手脚在…

录第第五十八天——每日温度,下一个更大元素|

单调栈 栈里的元素保持单调递增或者递减,栈内元素是元素下标。单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次求一个元素右边第一个更大元素,单调栈…

行业分享----dbaplus174期:美团基于Orchestrator的MySQL高可用实践

记录 MySQL高可用方案-MMM、MHA、MGR、PXC https://blog.csdn.net/jycjyc/article/details/119731980 美团数据库高可用架构的演进与设想 https://tech.meituan.com/2017/06/29/database-availability-architecture.html

js事件委托是什么?

事件委托是一种 JavaScript 编程技术,用于在父元素上设置事件监听器,以捕获其子元素的事件。这种技术通常用于动态生成元素的场景,其中子元素的增删改频繁,如果直接在子元素上设置事件监听器,会使得代码复杂且难以维护…

C语言实现双向链表

1.版本一 由于节点之间的连接变多 所以我们最好提前将前驱节点和后继节点用变量保存下来 以免等下在进行节点之间的指向时出错 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 节点类 typedef struct Node {// 数据域int data;// 指针域…

【python playwright 安装及验证】

python playwright pip install playwright pip install playwright -i http://mirrors.aliyun.com/pypi/simple/ playwright codegen -o script.py -b chromium --ignore-https-errors --viewport-size “2560,1440” --proxy-server “http://100.8.64.8:60497” https://w…

Harbor安装

采用原生的方式安装Harbor 下载Harbor安装包&#xff1a;https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz 拖拽到Linux并解压&#xff1a; tar -zxvf harbor-offline-installer-v2.3.4.tgz -C /usr/local/修改Harbor配置文…

webpack的性能优化(二)——减少打包体积

优化webpack性能时&#xff0c;主要集中在两个方面&#xff1a;优化构建后的结果和优化构建时的速度。前一篇文章已经介绍了如何通过webpack的分包来优化构建后的结果。而在本篇文章中&#xff0c;我们将从减少打包体积的角度来探讨。 1.通过CDN链接引入第三方库 CDN是指通过相…

基于Python编程实现简单网络爬虫实现

引言 网络爬虫&#xff08;英语&#xff1a;web crawler&#xff09;&#xff0c;也叫网络蜘蛛&#xff08;spider&#xff09;&#xff0c;是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。 --维基百科 网络爬虫可以将自己所访问的页面保存下来&#xff0c…

python 通过定时任务执行pytest case

这段Python代码使用了schedule库来安排一个任务&#xff0c;在每天的22:50时运行。这个任务执行一个命令来运行pytest&#xff0c;并生成一个报告。 代码开始时将job_done变量设为False&#xff0c;然后运行预定的任务。一旦任务完成&#xff0c;将job_done设置为True并跳出循…

Netty-Netty实现自己的通信框架

通信框架功能设计 功能描述 通信框架承载了业务内部各模块之间的消息交互和服务调用&#xff0c;它的主要功能如下&#xff1a; 基于 Netty 的 NIO 通信框架&#xff0c;提供高性能的异步通信能力&#xff1b; 提供消息的编解码框架&#xff0c;可以实现 POJO 的序列化和反…

AI智能分析网关V4烟火检测算法解决方案

一、背景需求 根据国家消防救援局公布的数据显示&#xff0c;2023年共接报处置各类警情213.8万起&#xff0c;督促整改风险隐患397万处。火灾危害巨大&#xff0c;必须引起重视。传统靠人工报警的方法存在人员管理难、场地数量多且分散等问题&#xff0c;无法有效发现险情降低…

【量化交易故事】小明开启了量化创业之旅-01

故事开始于2023年的春天&#xff0c;小明是一位对金融市场充满热情的IT工程师。在经历了数次基于主观判断和个人情绪进行投资却收获平平后&#xff0c;他意识到传统交易方式中的人为因素难以避免&#xff0c;而这往往成为影响投资决策稳定性和准确性的关键障碍。在一次偶然的机…

以太网抓包软件Wireshake应用介绍( SMART PLC MODBUSTCP通信)

首先介绍下常看到的字符ACK,ACK是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符,表示发来的数据已确认接收无误。在TCP/IP协议中,如果接收方成功的接收到数据,会回复一个ACK数据。通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。ACK在TCP的…

dcm数据格式转nrrd数据格式(2维转3维)

目的 将dcm数据格式&#xff08;2D&#xff09;转成nrrd数据格式&#xff08;3D&#xff09; 将一个文件夹下的dcm数据转成一个nrrd数据 代码 1. 安装必要包 pip install SimpleITK2. 上代码 Descripttion: Result: Author: Philo Date: 2024-01-10 14:25:49 LastEditors: …