5.10笔记and作业

本文详细介绍Python中文件的各种读写操作,包括f.read(), f.readline(), f.readlines()等,并深入探讨with语句的使用及文件操作模式如w, wb+, ab+。此外,文章还覆盖了Python中异常处理的基本概念和实践,包括try-except语句的运用,自定义异常的创建,以及如何优雅地处理各种常见异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔记
1.读操作有哪四种
1.f.read()
2.f.readline()
3.f.readlines()
4.with open(‘b.txt’,‘r’)

2.with的用法

with open('b.txt','r') as f:

3.w,wb+,ab+
w,只写操作
wb+二进制读写
ab+二进制追加

import  os
os.rename()#重命名
os.remove()#移除
os.mkdir()#创建目录
os.makedirs()#z创建多级目录
os.rmdir()#删除目录
os.removedirs()#删除多级目录
os.getcwd()#获取当前目录
os.listdir()#获取当前目录列表
os.chdir()#切换目录
os.path.exists()#判断是否存在
os.path.isfile()#判断是否是文件
os.path.isdir()#判断是否是目录
os.path.abspath()#获取绝对路径
os.path.isabs()#判断是否为绝对路径
os.path.basename()#获取路径的最后部分
os.path.dirname()#获取路径中的路径部分

eg:

with open('b.txt','r') as f:
    contents=f.readlines()
    dzd={}
    for line in contents:
        if line[-1]=='\n':#\n
            a=line[:-1].split(',')#如果遇到\n,那么删除,然后用','进行划分
        else:
            a=line.split(',')#否则直接用‘,’进行划分
            #此时得到a的值['num':001,'name':'张三']
        zd={}
        for x in a:#循环对a再操作
            lb=x.split(':')
            if lb[0]=='num':
                dzd[lb[1]]=zd
            else:
                zd[lb[0]]=lb[1]
    print(dzd)
with open('c.txt','w') as f:
    for k,v in dzd.items():
        if v['age']>=18:
            f.write('num:'+k+',')
            for k1,v1 in v.items():
                f.write(k1+':'+str(v1))
                if k1=='age':
                    f.write('\n')
                else:
                    f.write(',')

异常

try:
    print(1/0)
except ZeroDivisionError as e:
    print('出错了')
    print(e)##出错提示
print('结束')

eg:

while True:
    try:
        a=input('请输入a')
        b=int(input('请输入b'))
        c=a>b##类型错误,字符串和数字不能比较大小,输出应该是typeerror
        print(c)
    except TypeError as f:
        print('有异常',f)

eg:

while True:
    try:
        a=int(input('请输入a'))#输入浮点型
        b=int(input('请输入b'))
        c=a+b##类型错误,字符串和数字不能比较大小,输出应该是typeerror
        print(c)
    except ValueError as f:
        print('有异常',f)

eg:

try:
    a=eval(input('请输入表达式'))
    print(a)
except ZeroDivisionError as e:
    print(e)

eg:

try:
    a=eval(input('请输入表达式'))
    print(a)
    b=[1,2]
    print(b[2])
except ZeroDivisionError as e:##异常不对应时,不能捕获异常
    print(e)

eg:

try:
    a=eval(input('请输入表达式'))
    print(a)
    b=[1,2]
    print(b[2])
except ZeroDivisionError as e:##异常不对应时,不能捕获异常
    print(e,'34343')

eg:

try:
    b=[1,2]
    print(b[2])
except IndexError as e:
    print('索引异常',e)

同一组合,只捕捉一个异常

try:
    a=eval(input('请输入表达式'))
    print(a)
    b=[1,2]
    print(b[2])
except (ZeroDivisionError,IndexError)as e:##异常不对应时,不能捕获异常
    print(e)

eg:
try:

    a=eval(input('请输入表达式'))
    print(a)
except:##能捕捉到所有异常,只是不知道是什么异常
    print('我能捕捉到所有异常')
else:#没有异常时执行
    print('我没有异常')
finally:#不管有没有异常都要执行
    print('========')

eg:

try:
    a=open('a.txt','r')
    a.write('gaga')
except IOError as e:##写入错误
    print(e)
finally:###当程序,一定执行完时,例如文件的关闭,使用finally
    a.close()

eg:

name=input('请输入')
try:
    if len(name):
        raise Exception('你好呀,你的名字错了')
except Exception as f:
    print(f)

eg:

try:
    a=[1,2,3]
    raise IndexError('索引超出范围')#不需要写错误语句,raise
except IndexError as f:
    print(f)

eg:

class MyEexcption(Exception):
    def __init__(self,msg,hehe):
        self.msg=msg
        self.gaga=hehe
    def __str__(self):
        return self.msg+str(self.gaga)
try:
    raise MyEexcption('哈哈',19)
except MyEexcption as hehe:
    print(hehe)

eg:

dog=input('请输入名字')
try:
    if dog=='藏獒':
        raise Exception('请重新输入')
    else:
        print(dog)
except Exception  as e:
    print(e)

eg:

class MMM(Exception):
    def __init__(self,length,atleast):
        self.length=length
        self.atleast=atleast
    def __str__(self):
        return '请输入的长度是{},最少长度是{}'.format(self.length,self.atleast)
msg=input('请输入:')
try:
    if len(msg)<=20:
        raise MMM(len(msg),20)
except MMM as f:
    print(f)

#单例模式

class Sun():
    _instance=None
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance=object.__new__(cls)
            return cls._instance
        else:
            return cls._instance
    def __init__(self,name):
        self.name=name
sun=Sun('张三')
yue=Sun('李四')
print(sun.name)
print(sun==yue)
print(sun is yue)

#优化代码

class Sun():
    _intance=None
    def __new__(cls, *args, **kwargs):
        if not cls._intance:
            cls._intance=object.__new__(cls)
        return cls._intance
    def __init__(self,name):
        self.name=name
a=Sun('张三')
b=Sun('李四')
print(a.name)
print(a==b)
print(a is b)

eg:

class BMW():
    def run(self):
        print('宝马跑')
    def stop(self):
        print('宝马停')
class Audi():
    def run(self):
        print('奥迪跑')
    def stop(self):
        print('奥迪停')
class Mbahe():
    def run(self):
        print('迈巴赫跑')
    def stop(self):
        print('迈巴赫停')
class CarFacory():
    @classmethod
    def makeCar(cls,name):
        if name=='宝马':
            return BMW()
        elif name=='奥迪':
            return Audi()
        elif name=='迈巴赫':
            return Mbahe()
a=CarFacory.makeCar('宝马')
b=CarFacory.makeCar('奥迪')
c=CarFacory.makeCar('迈巴赫')
a.run()
a.stop()
b.run()
b.stop()
c.run()
c.stop()

#观察者模式

class Boss():
    def __init__(self):
        self.status=''
        self.observers=[]
    def append(self,oberser):
        self.observers.append(oberser)
    def update(self):
        for obj in self.observers:
            obj.update()
class YeWuEmployee():
    def __init__(self,name,boss):
        self.name=name
        self.boss=boss
    def update(self):
        print('业务组:{}别玩了,{}'.format(self.name,self.boss.status))
class Caiwu():
    def __init__(self,name,boss):
        self.name=name
        self.boss=boss
    def update(self):
    print('财务组:{}今天到广州最好的饭店吃饭,{}'.format(self.name,self.boss.status))

eg:

if __name__ == '__main__':
    ljc=Boss()
    cc=YeWuEmployee('陈成',ljc)
    wx=YeWuEmployee('伍鑫',ljc)
    hj=Caiwu('黄俊',ljc)
    ljc.status='回国了'
    ljc.append(cc)
    ljc.append(wx)
    ljc.append(hj)
    ljc.update()

eg:

class Boss():
    def __init__(self):
        self.status=''
        self.observers=[]
    def append(self,oberser):
        self.observers.append(oberser)
    def update(self):
        for obj in self.observers:
            obj.update()
class Message():
    def __init__(self, name, boss):
        self.name = name
        self.boss = boss
class YeWuEmployee(Message):
    def update(self):
        print('业务组:{}别玩了,{}'.format(self.name,self.boss.status))
class Caiwu(Message):
    def update(self):
        print('财务组:{}今天到广州最好的饭店吃饭,{}'.format(self.name,self.boss.status))
if __name__ == '__main__':
    ljc=Boss()
    cc=YeWuEmployee('陈成',ljc)
    wx=YeWuEmployee('伍鑫',ljc)
    hj=Caiwu('黄俊',ljc)
    ljc.status='回国了'
    ljc.append(cc)
    ljc.append(wx)
    ljc.append(hj)
    ljc.update()

eg:

class CashNormal():
    def __init__(self):
        pass
    def getMoney(self,money):
        return money
class CashRate():
    def __init__(self,rate):
        self.rate=rate
    def getMoney(self,money):
        return self.rate*money
class CashReturn():
    def __init__(self,condition,ret):
        self.condition=condition
        self.ret=ret
    def getMoney(self,money):
        return money-(money//self.condition)*self.ret
class Celue():
    def __init__(self,obj):
        self.obj=obj
    def getMoney(self,money):
        return self.obj.getMoney(money)
if __name__ == '__main__':
    zd={}
    money=float(input('请输入钱'))
    zd[0]=Celue(CashNormal())
    zd[1]=Celue(CashRate(0.8))
    zd[2]=Celue(CashReturn(300,50))
    ce=int(input('请输入消费策略'))
    if ce not in zd:
        ce=0
    fuqian=zd[ce].getMoney(money)
    print(fuqian)

eg:

import pygame
from aaa import *
print(_a)##*不能输出带下划线的
from  aaa import a,_a
print(a)
print(_a)

eg:

def hanshu(a,b):
    print(a+b)
hanshu(c=5,d=6)#报错,位置参数,不能再用其他变量赋值

eg:

def hanshu(a=[]):
    a.append(6)
    print(a)
hanshu()#[6]
hanshu()#[6,6]

eg:

def hanshu():
    a=[]
    for i in range(3):
        x=lambda d:d*i
        a.append(x)
    return a
y=hanshu()
for x in y:
    print(x(5))

##函数的顺序,LEGB

L,Local函数的内部,局部作用域
E,Enclosing,嵌套函数的外层函数内部,嵌套作用域
Global,全局作用域
Built-in ,内建函数,内建作用域
a=1
b=4
c=6
def hanshuw():
    a=2
    b=5
    def hanshun():
        a=3
        print(a)
        print(b)
        print(c)
        print(max,__name__)
    hanshun()
hanshuw()

作业
1、定义一个函数func(filename) filename:文件的路径,
函数功能:打开文件,并且返回文件内容,最后关闭,用异常来处理可能发生的错误。
“”"

import  os
def func(filename):
    try:
        f=open(filename)
    except Exception as e:
        print(e)
    else:
        print(f.read())
        f.close()

2.、编写一个计算减法的方法,当第一个数小于第二个数时,抛出“被减数不能小于减数"的异常

def hanshu(a,b):
        if a < b:
            raise BaseException('被减数不能小于减数')
        else:
            return a-b
print(hanshu(1,3))

3、定义一个函数func(listinfo) listinfo:为列表,listinfo = [133, 88, 24, 33, 232, 44, 11, 44],
返回列表小于100,且为偶数的数

listinfo = [133, 88, 24, 33, 232, 44, 11, 44]
def func(listinfo):
    for x in listinfo:
        try:
            if x<100 and x%2==0:
                print(x)
        except Exception as  a :
            return a
        else:
            return None

print(func(listinfo))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值