当前位置: 首页 > 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.dtcms.com/a/340238.html

相关文章:

  • day31 SQLITE
  • 百度Q2财报:总营收327亿 AI新业务收入首次超100亿
  • 前端-JavaScript笔记(核心语法)
  • Go语言数据类型全解析
  • 线程安全的产生以及解决方案
  • 记一次pnpm start启动异常
  • 学习设计模式《二十三》——桥接模式
  • 算法实战入门第二篇:链表结构与五大经典应用
  • 如何制作免费的比特币冷钱包
  • C++中的 Eigen库使用
  • 机器学习算法核心总结
  • AI全栈工程师:重塑软件开发全生命周期的未来革命
  • Nginx目录结构与配置文件全解析
  • 3-1〔OSCP ◈ 研记〕❘ WEB应用攻击▸理论概述 OWASP
  • 【LeetCode 热题 100】279. 完全平方数——(解法三)空间优化
  • Windows 中的“计数器”
  • ASP.NET 使用redis 存储session 负载机器共享会话状态
  • 【39页PPT】大模型DeepSeek在运维场景中的应用(附下载方式)
  • RabbitMQ:消息转化器
  • 高通 XR 系列芯介绍
  • 【论文阅读】SIMBA: single-cell embedding along with features(2)
  • ansible playbook 实战案例roles | 实现基于firewalld添加端口
  • ansible playbook 实战案例roles | 实现基于 IHS 的 AWStats 访问监控系统
  • Milvus 可观测性最佳实践
  • 分布式唯一 ID 生成方案
  • 基于 Uniapp 的医疗挂号系统开发经验分享
  • 苹果XR芯片介绍
  • 关于uniappx注意点1 - 鸿蒙app
  • XR(AR/VR/MR)芯片方案,Soc VS “MCU+协处理器”?
  • 橙武低代码 + AI:制造业场景中的设计思考