python基础之文件操作和异常处理

  • Post category:Python

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 代码块中的清理工作。