Python基础之文件操作和异常处理
文件操作
Python中的文件操作主要包括文件读取、文件写入和文件追加等操作。
文件读取
Python中通过 open() 函数可以打开一个文件,读取其中的内容,具体用法如下:
f = open('file.txt', 'r')
content = f.read()
f.close()
以上代码的作用是打开名为 file.txt
的文件,并将文件中的内容读取出来赋值给变量 content
。文件读取完成后需要使用 close() 函数关闭文件,避免占用过多的系统资源。
文件写入
文件写入是指将数据写入到文件中。同样可以使用 open() 函数打开文件,使用 write() 函数将数据写入到文件中。示例代码如下:
f = open('file.txt', 'w')
f.write('Hello World')
f.close()
以上代码的作用是打开名为 file.txt
的文件,并将字符串 Hello World
写入文件中。
文件追加
在文件末尾追加内容也是常见的文件操作之一。可以使用 open() 函数的追加模式打开文件,并使用 write() 函数将内容添加到文件末尾。示例代码如下:
f = open('file.txt', 'a')
f.write('Hello World')
f.close()
以上代码的作用是打开名为 file.txt
的文件,将字符串 Hello World
添加到文件末尾。
异常处理
Python中的异常处理是指在代码执行过程中遇到错误信息时的处理方式。Python中提供了 try/except 语句来捕获和处理异常。
基本语法
try/except 语句的基本语法如下:
try:
# 可能出现异常情况的代码块
except Exception as e:
# 异常处理代码块,e是异常对象,可以通过 str(e) 得到异常描述信息
else:
# 如果执行 try 代码块中没有引发异常则执行 else 代码块
finally:
# 不论 try 代码块中是否引发异常都会执行 finally 代码块,用于清理工作
示例代码
下面是一个使用 try/except 语句进行异常处理的示例代码:
try:
num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入另一个整数:'))
result = num1 / num2
print(result)
except ZeroDivisionError:
print('除数不能为0')
except ValueError:
print('输入的不是整数')
else:
print('运行结束')
finally:
print('完成清理工作')
上述代码中,首先尝试获取用户输入的两个整数,然后计算它们的商并输出结果。如果输入的除数是0,则触发 ZeroDivisionError 异常;如果输入的数据不是整数,则触发 ValueError 异常,程序将捕获这些异常并输出提示信息。在代码执行完毕后,无论是否引发异常,均会执行 finally
代码块中的清理工作。
完整攻略示例
假设现在需要实现一个简单的成绩数据统计功能,用户输入学生姓名和成绩,程序将读取已有的文件,将新输入的数据写入到文件末尾,并按照学生姓名升序排序后输出到控制台。如果同时输入了相同姓名的学生,则将之前的成绩替换为新输入的成绩。如果出现任何异常情况,程序将输出错误信息。
示例代码如下:
try:
name = input('请输入学生姓名:')
score = int(input('请输入学生成绩:'))
# 读取已有数据
f = open('data.txt', 'r')
content = f.read()
f.close()
# 将新数据写入文件
f = open('data.txt', 'w')
lines = content.strip().split('\n')
exist = False
for line in lines:
items = line.split(',')
if items[0] == name:
items[1] = str(score)
exist = True
line = ','.join(items)
f.write(line + '\n')
if not exist:
f.write(name + ',' + str(score) + '\n')
f.close()
# 对数据进行排序并输出
f = open('data.txt', 'r')
lines = f.readlines()
f.close()
data = []
for line in lines:
items = line.strip().split(',')
data.append((items[0], int(items[1])))
sorted_data = sorted(data, key=lambda x: x[0])
print('姓名\t成绩')
for item in sorted_data:
print('{}\t{}'.format(item[0], item[1]))
except Exception as e:
print('发生错误:{}'.format(str(e)))
else:
print('运行结束')
finally:
print('清理工作完成')
在此示例代码中,首先尝试获取用户输入的学生姓名和成绩,然后打开名为 data.txt
的文件并将其中的内容读取出来。接下来对数据进行处理,如果已有相同姓名的学生,则将原有的成绩替换为新输入的成绩;反之则将新输入的数据写入到文件末尾。最后对数据进行排序并输出,如果出现异常情况则输出错误信息。在代码执行完毕后,无论是否引发异常,均会执行 finally
代码块中的清理工作。