在青训营的学习过程中,今天着重学习了 Python 语言里非常实用的两个部分 —— 文件操作和异常处理,它们在实际的编程应用中扮演着至关重要的角色,能让我们的程序更加健壮、灵活地处理各种情况以及与外部文件进行交互。
文件操作
文件操作是程序与外部存储设备上的文件进行交互的手段,比如读取文件中的数据用于后续分析,或者将程序产生的数据保存到文件中方便下次使用等。
-
打开文件:
在 Python 中,使用open()函数来打开文件,它接收两个参数,第一个参数是文件的路径(可以是相对路径或者绝对路径),第二个参数是打开文件的模式,常见的模式有'r'(只读模式,用于读取文件内容,如果文件不存在会报错)、'w'(写入模式,会清空原文件内容后写入新内容,如果文件不存在则创建新文件)、'a'(追加模式,在原文件末尾添加内容,若文件不存在则创建)、'x'(创建新文件并写入,如果文件已存在则报错)等,还有'b'用于二进制文件操作(比如操作图片、音频等文件时会用到,常和前面的读写模式组合使用,像'rb'表示以二进制只读模式打开)、't'表示文本模式(默认就是文本模式)。
例如,以只读模式打开一个名为 example.txt 的文本文件:
file = open('example.txt', 'r')
-
读取文件内容:
有多种方式读取文件内容,常用的有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())
-
写入文件内容:
当以写入或者追加模式打开文件后,就可以使用write()方法向文件里写入内容了。比如以追加模式向example.txt文件添加一行文字:
file = open('example.txt', 'a')
file.write('\nThis is a new line added.')
file.close() # 操作完文件后记得关闭文件,释放资源
-
关闭文件:
使用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 的用法
通过学习文件操作,我们能更好地与外部数据文件打交道,让程序具备持久化存储和读取数据的能力;而掌握异常处理则使得程序更加健壮,能够应对各种意外情况,提高用户体验。这两部分知识相互配合,在后续的编程实践中一定会经常用到,需要我们不断地去理解和熟练运用