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

Python文件操作与异常处理详解 :基础方法、注意事项及os模块常用功能

在Python开发中,文件操作是非常基础且重要的技能。无论是读写数据、处理日志,还是管理文件系统,掌握文件操作和异常处理机制都能让你的代码更加健壮和高效。本文将系统介绍Python的文件操作基本方法,结合异常处理机制,并介绍常用的os模块功能,助你写出高质量的文件处理代码。


目录

一、Python文件操作基础

1.1  打开文件

1.2 读写文件

二、文件操作注意事项

三、Python异常处理机制

四、常用OS模块功能介绍

五、总结


一、Python文件操作基础

Python使用内置函数open()打开文件,常见用法:

f = open('filename.txt', mode='r', encoding='utf-8')
1.1  打开文件

mode参数指定文件打开模式:

'r'只读(默认)
'w'写入(会覆盖原文件)
'a'追加写入(在文本末尾追加,不会覆盖原文件)
'b'二进制模式
'+'读写模式

基础用法:

(1)'r':只读模式(默认)。文件必须存在,否则报错。

(2)'w':写入模式。如果文件存在,会清空原内容;文件不存在则新建。

(3)'a':追加模式。写入时从文件末尾追加内容,文件不存在则新建。

拼接用法

1. b(二进制模式)

(1)'rb':以二进制只读方式打开文件。常用于读取图片、视频、音频等非文本文件。

(2)'wb':以二进制写入方式打开文件。会覆盖原文件内容。

(3)'ab':以二进制追加方式打开文件。在文件末尾写入二进制数据。

2. +(读写模式)

(1)'r+':读写模式。文件必须存在,允许读取和写入。写入不会清空文件,但会从文件开头覆盖。

(2)'w+':读写模式。如果文件存在,会清空原内容再写;如果不存在则新建。

(3)'a+':读写模式。允许在文件末尾追加内容,也可以读取。文件不存在则新建。

3. b+ 结合

(1)'rb+':以二进制方式读写文件,文件必须存在。既能读也能写。

(2)'wb+':以二进制方式读写文件,如果文件存在会清空原内容。

(3)'ab+':以二进制方式读写文件,在文件末尾追加写入,同时允许读取。


1.2 读写文件

1)读文件操作:read()、readline()、readlines()

content = f.read()           # 读取全部内容
line = f.readline()          # 读取一行
lines = f.readlines()        # 读取所有行,返回列表

2)写入文件内容

f.write('Hello, world!\n')
f.writelines(['line1\n', 'line2\n'])

3)关闭文件:操作完成后,务必关闭文件释放资源

f.close()

4)推荐的with语句:使用with语句自动管理文件关闭,避免忘记关闭导致资源泄露

with open('filename.txt', 'r', encoding='utf-8') as f:content = f.read()
# 无需显式调用close,自动关闭

二、文件操作注意事项

1) 编码问题:读写文本文件时,推荐显式指定encoding='utf-8',避免编码错误。

2) 文件路径:使用绝对路径或相对路径时要注意当前工作目录,避免找不到文件。

3) 文件不存在:读取不存在的文件会抛出FileNotFoundError异常。

4) 写入模式谨慎:'w'模式会清空原文件,使用前确认需求

5) 二进制文件处理:图片、音频等文件需用'rb''wb'模式处理。

三、Python异常处理机制

文件操作常伴随异常,如文件不存在、权限不足等。Python的异常处理结构如下:

try:# 可能抛出异常的代码with open('file.txt', 'r') as f:data = f.read()
except FileNotFoundError:print("文件未找到,请检查路径")
except PermissionError:print("权限不足,无法访问文件")
except Exception as e:print(f"发生其他异常: {e}")
else:print("文件读取成功")
finally:print("无论是否异常都会执行")

1)try块中写可能出错的代码
2)except捕获并处理特定异常
3)else在无异常时执行
4)finally无论是否异常都会执行,常用于资源释放

四、常用OS模块功能介绍

os模块提供丰富的文件和目录操作接口,常用功能包括:

功能方法示例说明
获取当前工作目录os.getcwd()返回当前脚本运行的目录路径
改变工作目录os.chdir(path)切换当前工作目录
创建目录os.mkdir(path)创建单层目录
递归创建目录os.makedirs(path)创建多层目录
删除文件os.remove(path)删除指定文件
删除空目录os.rmdir(path)删除空目录
遍历目录os.listdir(path)返回目录下所有文件和目录列表
高效遍历目录os.scandir(path)返回目录迭代器,包含文件类型信息
判断路径类型os.path.isfile(path)判断是否为文件
断路径是否为目录os.path.isdir(path)判断是否为目录
拼接路径os.path.join(path, *paths)拼接路径,自动添加分隔符
获取绝对路径os.path.abspath(path)返回路径的绝对路径

1. 获取当前工作目录 — os.getcwd()

功能说明:

  • 返回当前Python脚本运行时的工作目录路径,类型为字符串。

示例:

import oscwd = os.getcwd()
print(f"当前工作目录是: {cwd}")

2. 改变工作目录 — os.chdir(path)

功能说明:

  • 将当前工作目录切换到指定路径 path
  • 后续相对路径操作都基于新目录。

示例:

import osos.chdir('/tmp')
print(f"切换后的工作目录: {os.getcwd()}")

3. 创建单层目录 — os.mkdir(path)

功能说明:

  • 在指定位置创建一个新目录。
  • 如果上级目录不存在,会抛出异常。

示例:

import osos.mkdir('new_folder')
print("目录创建成功")

4. 递归创建多层目录 — os.makedirs(path)

功能说明:

  • 递归创建多层目录,如果中间目录不存在,会自动创建。
import osos.makedirs('parent_dir/child_dir/grandchild_dir')
print("多层目录创建成功")

5. 删除文件 — os.remove(path)

功能说明:

  • 删除指定路径的文件。
  • 如果路径不存在或是目录,会抛出异常。

示例:

import osos.remove('file.txt')
print("文件删除成功")

6. 删除空目录 — os.rmdir(path)

功能说明:

  • 删除指定的空目录。
  • 如果目录非空或不存在,会抛出异常。

示例:

import osos.rmdir('empty_folder')
print("空目录删除成功")

7. 遍历目录内容 — os.listdir(path)

功能说明:

  • 返回指定目录下所有文件和目录的名称列表(字符串列表)。
  • 不包含子目录的内容,只列出当前目录。

示例:

import osentries = os.listdir('.')
print("当前目录下的文件和目录:", entries)

8. 高效遍历目录 — os.scandir(path)

功能说明:

  • 返回一个迭代器,迭代器中的每个元素是os.DirEntry对象,包含文件名、路径和类型等信息。
  • os.listdir()更高效,适合需要判断文件类型的场景。

示例:

import oswith os.scandir('.') as entries:for entry in entries:if entry.is_file():print(f"文件: {entry.name}")elif entry.is_dir():print(f"目录: {entry.name}")

9. 判断路径是否为文件 — os.path.isfile(path)

功能说明:

  • 判断给定路径是否存在且是一个文件。
  • 是文件返回 True,否则返回 False

示例:

import osif os.path.isfile('example.txt'):print("example.txt 是文件")
else:print("example.txt 不是文件")

10. 判断路径是否为目录 — os.path.isdir(path)

功能说明:

  • 判断给定路径是否存在且是一个目录。
  • 是目录返回 True,否则返回 False

示例:

import osif os.path.isdir('my_folder'):print("my_folder 是目录")
else:print("my_folder 不是目录")

11. 拼接路径 — os.path.join(path, *paths)

功能说明:

  • 拼接多个路径片段,自动添加操作系统的路径分隔符(如Windows的\,Linux的/)。
  • 避免手动拼接带来的错误。

示例:

import osfull_path = os.path.join('folder', 'subfolder', 'file.txt')
print(full_path)  # Windows: folder\subfolder\file.txt, Linux: folder/subfolder/file.txt

12. 获取绝对路径 — os.path.abspath(path)

功能说明:

  • 返回指定路径的绝对路径。
  • 若传入相对路径,转换为绝对路径。

示例:

import osabs_path = os.path.abspath('file.txt')
print(f"绝对路径是: {abs_path}")

五、总结

1)使用 open() 进行文件读写时,推荐采用 with 语句自动管理资源,避免忘记关闭文件导致的问题。

2)编写文件操作代码时,务必结合异常处理机制,捕获并处理可能出现的错误,提升程序的健壮性和稳定性。

3)利用 os 模块提供的丰富接口,实现文件和目录的创建、删除、遍历等常见操作,方便灵活地管理文件系统。

4)掌握 os.scandir() 等高效遍历目录的方法,能够显著提升文件系统操作的性能

http://www.lryc.cn/news/627110.html

相关文章:

  • MySQL数据库安全配置核心指南
  • [激光原理与应用-316]:光学设计 - SolidWorks 、AutoCAD、Zemax三者的比较与协同
  • Python 数据可视化:Matplotlib 与 Seaborn 实战
  • 计算机网络--HTTP协议
  • Redis(以Django为例,含具体操作步骤)
  • 项目1其二(验证码、jwt)
  • Python如何将两个列表转化为一个字典
  • Spring Boot 实战:从项目搭建到部署优化
  • react state变化生命周期钩子
  • 【ansible】4.实施任务控制
  • VMware Workstation | 安装Ubuntu20.04.5
  • Linux基础介绍-3——第一阶段
  • 领码方案:通用物联网数据采集低代码集成平台——万物智联时代的黄金钥匙
  • 解决 nginx: [warn] “ssl_stapling“ ignored, issuer certificate not found 报错
  • 计算机视觉 图片处理 在骨架化过程中,每次迭代都会从图像的边缘移除一层像素,直到只剩下单像素宽度的骨架
  • RAG优化进阶 - LinkAI智能体平台的知识库落地实践
  • 数据库架构开发知识库体系
  • 【JavaEE】(17) MyBatis 基础
  • 趣打印高级版--手机打印软件!软件支持多种不同的连接方式,打印神器有这一个就够了!
  • sourcetree 拉取代码
  • HTML--pre标签的作用
  • SpringCloud微服务架构入门指南
  • 8 webUI中-Controlnet(控制与约束)的应用分类与使用方法
  • CentOS 系统 Java 开发测试环境搭建手册
  • 用倒计时软件为考研备考精准导航 复习 模拟考试 日期倒计时都可以用
  • E10 通过RPC实现账号批量锁定与解锁
  • 宝塔部署 Nuxt3
  • 透传 Attributes(详细解析)1
  • 新手向:Python制作简易音乐播放器
  • 软考中级习题与解答——第一章_数据结构与算法基础(1)