Python初级案例教学之文件读取和写入以及自定义异常类【第七课】

简介: 文件的基本操作文件打开f = open()with open() as f:文件读 /写f.read() f.readline() f.readlines()f.write()文件关闭f.close()

实验题目:文件读取

将StudentInfo中的信息以字典的形式存储在列表里。

文件内容:

学号|姓名|平时成绩|期末成绩
1445204009|王召|100|90
1445204010|林锦|95|67
1445204011|张晓|80|90
1445204012|赵雨|90|79

第一步:打开文件

with open("studentInfo.txt", 'r', encoding='utf8') as f:

1.encoding='utf8'防止读取的为乱码
2.使用with的话就不用close()了

第二步:读取第一行,以‘|’分割并去掉‘\n’,转化为列表作为字典的key

head = f.readline().strip().split('|')

1.strip()去除'\n'
2.split('|')以‘|’分割

第三步:读取一行,以‘|’分割并去掉‘\n’,转化为列表

    for line in f:
        line = line.strip().split('|')  # 读取一行,以‘|’分割并去

第四步:为字典的key赋值对应的value

   for i in range(len(head)):
            f_dict = {}
            f_dict[head[i]] = line[i]

第五步:将字典添加进列表

 f_list = []
 f_list.append(f_dict)

第六步:输出

print(f_list)

代码整合:

with open("studentInfo.txt", 'r', encoding='utf8') as f:
    head = f.readline().strip().split('|')   # 读取第一行,以‘|’分割并去掉‘\n’,转化为列表作为字典的key
    f_list = []
    for line in f:
        line = line.strip().split('|')  # 读取一行,以‘|’分割并去掉‘\n’,转化为列表
        f_dict = {}
        for i in range(len(head)):
            f_dict[head[i]] = line[i]   # 为字典的key赋值对应的value
        f_list.append(f_dict)     # 将字典添加进列表
print(f_list)

结果:

在这里插入图片描述

实验题目:字典格式读取文件

现有一个user.csv文件,内容如下:

name,username,email
杨洋,yangy,yangy@sina.com
贾子豪,jiazh,jiazh@126.com
于飞,yuf,yuf@163.com
田宇辰,tianych,tianych@sina.com

1)以字典格式读取csv文件并打印出每个人的名字和电子邮件地址

2)新建usercopy.csv文件,将user.csv文件的内容按照csv文件写入的方式写入进usercopy.csv中。

import csv
with open('user.csv', 'r', encoding='utf8') as f:     # 读
    dictReader = csv.DictReader(f)
    header = dictReader.fieldnames
    ls = []
    for row in dictReader:
        ls.append(list(row.values()))
    print(ls)
with open('usercopy.csv', 'w', encoding='utf8') as file:    # 写
    write = csv.writer(file)
    write.writerows(ls)

在这里插入图片描述
在这里插入图片描述

自定义一个异常类:

下面定义了一个CandleShop类:

class CandleShop:
    name = "Here's a Hot Tip: Buy Drip Candles"

    def __init__(self, stock):
        self.stock = stock

    def buy(self, color):
        self.stock[color] = self.stock[color] - 1


candle_shop = CandleShop({'blue': 6, 'red': 2, 'green': 0})
candle_shop.buy('blue')

1)自定义一个异常类OutOfStack

2)请修改实例buy当购买蜡烛的量超出库存时会抛出OutOfStack异常

3)想办法在主程序中加一个代码会引起程序抛出OutOfStack

4)捕获该异常,并输出异常的具体信息。

class CandleShop:
    name = "Here's a Hot Tip: Buy Drip Candles"

    def __init__(self, stock):
        self.stock = stock

    def buy(self, color):
        self.stock[color] = self.stock[color] - 1


class OutOfStack(Exception):     # (1)自定义一个异常类OutOfStack
    pass


def new_buy(self, color):      # (2)动态修改实例buy当购买蜡烛的量超出库存时会抛出OutOfStack异常
        if self.stock[color] > 0:
            self.stock[color] = self.stock[color] - 1
        else:
            raise OutOfStack("购买蜡烛的量超出库存!")     # 产生异常


try:
    candle_shop = CandleShop({'blue': 6, 'red': 2, 'green': 0})
    CandleShop.buy = new_buy
    candle_shop.buy('blue')
    candle_shop.buy('green')      # (3)加一个代码会引起程序抛出OutOfStack
except OutOfStack as e:      # (4)捕获该异常
    print(e)  # 输出异常的具体信息
else:
    print("蜡烛还有库存!")

在这里插入图片描述

目录
相关文章
|
27天前
|
测试技术 开发者 Python
对于Python中的异常要如何处理,raise关键字你真的了解吗?一篇文章带你从头了解
`raise`关键字在Python中用于显式引发异常,允许开发者在检测到错误条件时中断程序流程,并通过异常处理机制(如try-except块)接管控制。`raise`后可跟异常类型、异常对象及错误信息,适用于验证输入、处理错误、自定义异常、重新引发异常及测试等场景。例如,`raise ValueError("Invalid input")`用于验证输入数据,若不符合预期则引发异常,确保数据准确并提供清晰错误信息。此外,通过自定义异常类,可以针对特定错误情况提供更具体的信息,增强代码的健壮性和可维护性。
|
26天前
|
Python
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
42 5
|
27天前
|
Python
在Python中,自定义函数可以抛出自定义异常
在Python中,自定义函数可以抛出自定义异常
42 5
|
27天前
|
存储 开发者 Python
自定义Python的异常
自定义Python的异常
14 5
|
2月前
|
存储 索引 Python
|
2月前
|
Python
Python生成器、装饰器、异常
【10月更文挑战第15天】
|
2月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
23 1
|
2月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
27 2
WK
|
2月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
21 0
|
13天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!