Python 文件操作与异常处理全解析
目录
一、文件的基本概念
1. 什么是文件
2. 文件操作的核心内容
3. 文件操作的作用
二、文件的基本操作
1. 文件操作三步走
2. 打开文件:open () 函数
2.1 文件路径
2.2 常用 mode 模式
3. 写入文件:write () 函数
4. 关闭文件:close () 函数
5. 解决中文乱码问题
6. 文件的读取操作
6.1 read (size) 方法:
6.2 readlines () 方法:
6.3 readline () 方法:
三、文件备份案例
1. 案例需求
2. 实现思路
3. 代码实现
四、文件和文件夹操作
1. os 模块
2. 与文件操作相关的方法
3. 与文件夹操作相关的方法
4. 递归删除非空文件夹
五、Python 异常处理
1. 什么是异常
2. 异常捕获:try...except
3. 捕获异常并输出错误信息
4. 异常捕获中的 else 语句
5. 异常捕获中的 finally 语句
总结
在 Python 编程中,文件操作是数据持久化的核心手段,而异常处理则是保证程序健壮性的关键。本文将系统梳理文件操作的核心知识与异常处理的实用技巧,帮助你轻松掌握这两项重要技能。
一、文件的基本概念
1. 什么是文件
文件是计算机中用于长久存储数据的基本单位,它将数据组织成可管理的形式,便于检索和使用。内存中的数据在计算机关机后会消失,而文件可以将数据保存到硬盘、U 盘等存储设备中。
从类型上看,文件可分为文本文件(如 TXT、HTML)、图像文件(如 JPEG、PNG)、音频文件(如 MP3、WAV)、视频文件(如 MP4、AVI)以及可执行文件(如 EXE、DLL)等多种类别。
2. 文件操作的核心内容
日常对文件的主要操作包括:
(1)创建文件
(2)打开文件
(3)读写文件
(4)文件备份
(5)关闭文件
3. 文件操作的作用
文件操作能将程序运行过程中产生的数据存储起来,使得程序下次执行时可以直接使用这些数据,无需重新生成,极大地提高了程序的效率和实用性。
二、文件的基本操作
1. 文件操作三步走
(1)打开文件
(2)读写文件
(3)关闭文件
2. 打开文件:open () 函数
在 Python 中,使用open()函数打开文件,语法如下:
f = open(name, mode)
(1)name:要打开的目标文件名(可包含具体路径)
(2)mode:打开文件的模式(访问模式)
(3)返回值:file 文件对象,后续操作通过该对象的方法实现
2.1 文件路径
(1)绝对路径:从盘符开始的完整路径,如 Windows 系统中的C:\Python\python.txt,Linux 系统中的/usr/local/nginx/conf/nginx.conf。绝对路径固定,但文件移动或程序迁移时较麻烦。
(2)相对路径:以 Python 文件本身为参考点的路径:
2.2 常用 mode 模式
-
- 同级关系:直接使用文件名
- 上级关系:通过../访问(多级可使用../../等)88
- 下级关系:通过文件夹名/文件名访问
模式 | 描述 |
---|---|
r | 只读模式,文件不存在则报错,光标在文件开头(默认模式) |
w | 只写模式,文件不存在则创建,写入时清空原有内容,光标在开头 |
a | 追加模式,文件不存在则创建,在文件尾部追加内容,光标在结尾 |
r+ | 读写模式,光标在文件开头 |
w+ | 读写模式,写入时清空原有内容 |
a+ | 读写模式,光标在文件结尾,打开时为追加模式 |
rb、wb、ab 等 | 对应模式的二进制操作,适用于图片、音频、视频等文件 |
提示:记住r(读)、w(写)、a(追加)三个基础模式即可应对大部分场景,带+的模式支持读写,带b的模式用于二进制文件操作。
3. 写入文件:write () 函数
基本语法:
f.write('要写入的内容') # 内容需为字符串类型
4. 关闭文件:close () 函数
f.close() # 关闭文件,释放资源
5. 解决中文乱码问题
默认编码可能导致中文乱码,打开文件时指定encoding='utf-8'即可:
f = open('python.txt', 'w', encoding='utf-8')
f.write('人生苦短,我学Python!')
f.close()
6. 文件的读取操作
6.1 read (size) 方法:
(1)读取指定长度(size)的内容,单位为字符 / 字节
(2)不传入 size 则读取全部内容
f = open('python.txt', 'r', encoding='utf-8')contents = f.read() # 读取所有内容# contents = f.read(1024) # 读取1024个字符print(contents)f.close()
6.2 readlines () 方法:
按行读取整个文件内容,返回列表(每行数据为一个元素)
f = open('python.txt', 'r', encoding='utf-8')lines = f.readlines()for line in lines:print(line, end='') # end=''避免重复换行f.close()
6.3 readline () 方法:
一次读取一行内容,每次调用后光标下移一行
f = open('python.txt', encoding='utf-8')while True:content = f.readline()if not content: # 读取完毕则退出循环breakprint(content, end='')f.close()
三、文件备份案例
1. 案例需求
用户输入当前目录下任意文件名,程序生成该文件的备份(备份文件名为xx[备份].后缀,如test[备份].txt)。
2. 实现思路
(1)接收用户输入的文件名
(2)规划备份文件名(拆分文件名和后缀,拼接备份名称)
(3)读取源文件内容,写入备份文件
3. 代码实现
# 1. 接收用户输入的文件名
oldname = input('请输入要备份的文件名称:')# 2. 规划备份文件名
index = oldname.rfind('.') # 从右边查找第一个'.'的下标
if index > 0:name = oldname[:index] # 获取文件名postfix = oldname[index:] # 获取文件后缀newname = name + '[备份]' + postfix # 拼接备份文件名# 3. 备份文件操作(使用二进制模式兼容所有文件类型)old_f = open(oldname, 'rb')new_f = open(newname, 'wb')# 循环读取并写入内容while True:content = old_f.read(1024) # 每次读取1024字节if len(content) == 0: # 读取完毕breaknew_f.write(content)# 关闭文件old_f.close()new_f.close()
else:print('请输入正确的文件名称,否则无法进行备份操作...')
四、文件和文件夹操作
1. os 模块
Python 通过os模块实现文件和文件夹的操作,使用前需先导入:
import os
2. 与文件操作相关的方法
函数 | 功能 |
---|---|
os.rename (旧文件名,新文件名) | 重命名文件 |
os.remove (文件名) | 删除文件 |
案例:
import os
import time# 重命名文件
os.rename('python.txt', 'linux.txt')
time.sleep(10) # 休眠10秒
# 删除文件
os.remove('linux.txt')
3. 与文件夹操作相关的方法
函数 | 功能 |
---|---|
os.mkdir (文件夹名) | 创建文件夹 |
os.getcwd() | 获取当前工作目录 |
os.chdir (目录名) | 切换工作目录 |
os.listdir (目录名) | 获取指定目录下的所有文件和文件夹,返回列表 |
os.rmdir (目录名) | 删除空文件夹 |
案例:
import os
import time# 创建文件夹(判断是否存在,避免报错)
if not os.path.exists('images'):os.mkdir('images')
if not os.path.exists('images/avatar'):os.mkdir('images/avatar')# 获取当前目录
print(os.getcwd())# 切换目录
os.chdir('images/avatar')
print(os.getcwd()) # 显示当前目录
os.chdir('../../') # 切换回上两级目录# 获取目录下的内容
print(os.listdir())time.sleep(10)
# 删除空文件夹
os.rmdir('images/avatar')
4. 递归删除非空文件夹
使用shutil模块的rmtree()方法可删除非空文件夹(慎重使用!):
import shutil# 递归删除文件夹及其内容
shutil.rmtree('要删除的文件夹路径')
五、Python 异常处理
1. 什么是异常
当程序运行过程中检测到错误时,解释器无法继续执行,会抛出错误提示,这就是异常。例如除数为 0、读取不存在的文件等。
2. 异常捕获:try...except
基本语法:
try:可能发生错误的代码
except:如果出现异常执行的代码
案例:
try:# 尝试读取文件f = open('python.txt', 'r', encoding='utf-8')content = f.readlines()print(content)
except:# 发生异常时创建文件print("文件不存在,已创建新文件")f = open('python.txt', 'w', encoding='utf-8')f.write('这是新创建的文件')f.close()
3. 捕获异常并输出错误信息
使用Exception as e捕获所有异常并获取错误信息:
try:f = open('python.txt', 'r', encoding='utf-8')content = f.readlines()
except Exception as e:print("错误信息:", e) # 输出错误描述print("错误参数:", e.args) # 输出错误参数(元组)
finally:f.close()
4. 异常捕获中的 else 语句
else语句用于执行无异常时的代码:
try:print(1 / 2) # 无异常
except Exception as e:print(e)
else:print("没有发生异常,执行else语句")
5. 异常捕获中的 finally 语句
finally语句用于无论是否发生异常都必须执行的代码(如关闭文件):
try:f = open('python.txt', 'r', encoding='utf-8')content = f.readlines()
except:print("发生异常")f = open('python.txt', 'w', encoding='utf-8')f.write('异常时创建')
else:print("无异常,内容:", content)
finally:f.close() # 无论是否异常都关闭文件print("finally语句必执行")
总结
文件操作是 Python 处理数据持久化的基础,掌握open()、read()、write()、close()等方法,以及os模块的文件和文件夹操作,能让你轻松管理计算机中的数据。而异常处理机制(try...except...else...finally)则能有效捕获和处理程序运行中的错误,提高程序的稳定性和健壮性。结合两者,可编写更可靠、实用的 Python 程序。