Python 中的文件操作与异常处理

133 阅读4分钟

在青训营的学习过程中,今天着重学习了 Python 语言里非常实用的两个部分 —— 文件操作和异常处理,它们在实际的编程应用中扮演着至关重要的角色,能让我们的程序更加健壮、灵活地处理各种情况以及与外部文件进行交互。

文件操作

文件操作是程序与外部存储设备上的文件进行交互的手段,比如读取文件中的数据用于后续分析,或者将程序产生的数据保存到文件中方便下次使用等。

  1. 打开文件
    在 Python 中,使用 open() 函数来打开文件,它接收两个参数,第一个参数是文件的路径(可以是相对路径或者绝对路径),第二个参数是打开文件的模式,常见的模式有 'r'(只读模式,用于读取文件内容,如果文件不存在会报错)、'w'(写入模式,会清空原文件内容后写入新内容,如果文件不存在则创建新文件)、'a'(追加模式,在原文件末尾添加内容,若文件不存在则创建)、'x'(创建新文件并写入,如果文件已存在则报错)等,还有 'b' 用于二进制文件操作(比如操作图片、音频等文件时会用到,常和前面的读写模式组合使用,像 'rb' 表示以二进制只读模式打开)、't' 表示文本模式(默认就是文本模式)。

例如,以只读模式打开一个名为 example.txt 的文本文件:

file = open('example.txt', 'r')
  1. 读取文件内容
    有多种方式读取文件内容,常用的有 read() 方法,它会一次性读取整个文件内容为一个字符串(对于文本文件),例如:

content = file.read()
print(content)

如果文件比较大,一次性读取可能占用过多内存,这时可以使用 readline() 方法逐行读取,如下:

while True:
    line = file.readline()
    if not line:
        break
    print(line.strip())  # strip() 方法用于去除每行末尾的换行符等空白字符

还有 readlines() 方法,它会把文件的每一行作为一个元素存储到一个列表中返回,方便后续按行处理:

lines = file.readlines()
for line in lines:
    print(line.strip())
  1. 写入文件内容
    当以写入或者追加模式打开文件后,就可以使用 write() 方法向文件里写入内容了。比如以追加模式向 example.txt 文件添加一行文字:

file = open('example.txt', 'a')
file.write('\nThis is a new line added.')
file.close()  # 操作完文件后记得关闭文件,释放资源
  1. 关闭文件
    使用 close() 方法来关闭文件,就像上面的示例中展示的那样,不过为了避免忘记关闭文件导致资源浪费等问题,还可以使用 with 语句来自动管理文件的打开和关闭,语法更加简洁且安全,例如:

with open('example.txt', 'r') as file:
    content = file.read()
    print(content)
# 这里退出 with 代码块后,文件会自动关闭,无需手动调用 close() 方法

异常处理

在程序运行过程中,难免会遇到各种错误情况,比如文件不存在、类型不匹配、除零错误等,异常处理机制可以让我们的程序在遇到这些问题时不至于直接崩溃,而是能够优雅地处理这些异常情况并继续执行或者给出合理的提示。

Python 使用 try-except 语句块来捕获和处理异常,基本语法如下:

try:
    # 这里放置可能会出现异常的代码
    result = 10 / 0  # 这行代码会引发除零异常
except ZeroDivisionError:
    # 当捕获到 ZeroDivisionError 类型的异常时,执行这里的代码
    print("除数不能为零呀,请检查代码!")

我们可以根据不同类型的异常来分别进行处理,还可以添加 else 子句(当 try 块中的代码没有抛出异常时执行)和 finally 子句(无论是否有异常,都会最终执行,常用来做一些清理资源等操作),示例如下:

try:
    file = open('nonexistent_file.txt', 'r')  # 尝试打开一个不存在的文件,会引发 FileNotFoundError 异常
    content = file.read()
except FileNotFoundError:
    print("文件不存在哦,请确认文件路径是否正确。")
else:
    print("文件读取成功,内容如下:")
    print(content)
finally:
    if 'file' in locals():  # 判断 file 变量是否存在,若存在则说明之前打开过文件(即使打开失败了)
        file.close()  # 关闭文件,避免资源泄漏,这里其实用 with 语句会更好,只是为了演示 finally 的用法

通过学习文件操作,我们能更好地与外部数据文件打交道,让程序具备持久化存储和读取数据的能力;而掌握异常处理则使得程序更加健壮,能够应对各种意外情况,提高用户体验。这两部分知识相互配合,在后续的编程实践中一定会经常用到,需要我们不断地去理解和熟练运用