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

283 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

实验题目:文件读取

将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("蜡烛还有库存!")

在这里插入图片描述