Python基础学习(十四)--文件操作,os模块,异常,抛出异常,设计模式

一、文件操作

(一)读取文件的简单操作

读取文件

# 第一个参数--文件的路径
# 第二个参数--访问文件的模型,r表示读,默认就是r模式
a=open('d:\\a.txt','r')    # a叫做文件句柄,用来操作文件
b=a.read()
print(b)
a.close()

(二)文件权限

1.读取操作

(1)r--以只读方式打开文件。文件的指针会放在文件的开头。这是默认模式。

(2)rb--以二进制格式打开一个文件用于只读。文件的指针会放在文件的开头。一般用于非文本文件如图片等。

(3)r+--打开一个文件用于读写。文件的指针会放在文件的开头。

(4)rb+--以二进制格式打开一个文件用于读写。文件的指针会放在文件的开头。一般用于非文本文件如图片等。

2.写操作

(1)w--打开一个文件只用于写入。如果该文件已存在则打开文件,删除原内容,从头开始编辑。如果该文件不存在,创建新文件。

(2)wb--以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,删除原内容,从头开始编辑。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

(3)w+--打开一个文件用于读写。如果该文件已存在则打开文件,删除原内容,从头开始编辑。如果该文件不存在,创建新文件。

(4)wb+--以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,删除原内容,从头开始编辑。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

(5)a--打开一个文件用于追加。如果该文件已存在,文件指针会放在文件的结尾。如果该文件不存在,创建新文件进行写入。

(6)ab--以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针会放在文件的结尾。如果该文件不存在,创建新文件进行写入。

(7)a+--打开一个文件用于读写。如果该文件已存在,文件指针会放在文件的结尾。如果该文件不存在,创建新文件进行读写。

(8)ab+--以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针会放在文件的结尾。如果该文件不存在,创建新文件进行读写。

(三)文件操作

1.读操作

(1)read()--会一次性读取全部内容。可加size参数,规定一次最多读取的size个字节。

a=open('d:\\a.txt','r')
print(a.read(4))
print(a.read(5))
a.close()

 

(2)readline()--每次读取一行,并且每一行末尾会读到\n,自带换行功能。也可加size参数。

a=open('d:\\a.txt','r')
b=a.readline()
print(b)    # 空行--解析出了\n
print(len(b))
a.close()
a=open('d:\\a.txt','r')
b=a.readline()
while len(b)>0:
    print(b)
    b=a.readline()
a.close()

 

(3)readlines()--一次性以行的形式读取文件的所有内容,并返回一个list(包括\n),需要遍历读出。

a=open('d:\\a.txt','r')
b=a.readlines()
print(b)
for x in b:
    print(x)
a.close()

(4)循环读取--句柄是一个可迭代的对象,因此可以循环读取文件中的内容,每次读一行。

for x in open('d:\\a.txt','r'):
    print(x)

2.写操作 

(1)write()--打开一个文件用于写入。若文件存在,打开,并删除院内用,从头进行编辑;若不存在,创建新文件。

a=open('d:\\a.txt','w')
a.write('我爱北京天安门')
a.close()

 

(2)writelines()--把参数中的内容全部写入文件中(多行一次性写入)。

ls=['aa','b\n','cc']
a=open('d:\\a.txt','w')
a.writelines(ls)
a.close()

(四)with

使用with方式操作文件,可以不用关闭文件,会自动关闭文件。

with open('d:\\a.txt','r') as f:
    b=f.read()
    print(b)

(五)指定文件格式,向文件中保存内容

with open('a.txt','w',encoding='utf-8') as p:
    p.write('你好呀')

二、os模块

import os

(一)重命名文件

os.rename('a.txt','b.txt')

(二)删除文件

os.remove('b.txt')

(三)创建目录

os.mkdir('x')

(四)删除目录

os.rmdir('x')

(五)创建多级目录

os.makedirs('a/a/a')

(六)删除多级目录

os.removedirs('a/a/a')

(七)获取当前所在目录

print(os.getcwd())

(八)获取目录列表

print(os.listdir(os.getcwd()))

(九)切换所在目录

os.chdir('E:\\')
print(os.getcwd())

(十)判断文件或文件夹是否存在

b=os.path.exists('E:\pywork\day13')
print(b)

(十一)判断是否为文件

print(os.path.isfile('extend.py'))

(十二)判断是否为目录

print(os.path.isdir('E:\pywork\day13'))

(十三)获取绝对路径

print(os.path.abspath('extend.py'))

(十四)判断是否为绝对路径

print(os.path.isabs(os.getcwd()))

(十五)获取路径中的最后部分

print(os.path.basename(os.getcwd()))

(十六)获取路径中的路径部分

print(os.path.dirname('E:\\pywork\\day08\\p1\\demox.py'))
print(os.path.dirname('E:\\pywork\\day08\\p1\\p'))

三、异常

当python脚本发生异常时,我们需要捕获处理它,否则程序会终止执行。

如果发生的异常类型和捕获的异常类型不相同,还是不能捕获异常,程序还是会结束。

while True:
    try:
        a=eval(input('请输入表达式:'))
        print(a)
    except ZeroDivisionError as e:
        print('除数为零,错误!')
        print(e)
        break

多分支结构,捕获多个异常

try:
    a=[1,2,3]
    print(a[3])
    print(3/0)
except IndexError as i:
    print(i)
except ZeroDivisionError as e:
    print(e)
print('结束')

元组结构捕获多个异常

try:
    a = [1, 2, 3]
    print(a[3])
    print(3 / 0)
except (IndexError,ZeroDivisionError) as e:
    print('有异常',e)
print('结束')

捕获所有异常

# except或except Exception
try:
    a = [1, 2, 3]
    print(a[1])
    print(1/0)
except Exception as f:
    print(f)
print('结束')

else格式

无异常正常结束则执行else中代码

注意,一定要有except

try:
    a=[1,2,3]
    print(a[1])
except IndexError as i:
    print(i)
else:
    print('无异常')
print('结束')

try...finally格式

try:
    a=[1,2,3]
    print(a[3])
except IndexError as f:
    print(f)
else:
    print('无异常')
finally:
    print('无论有没有错误,我都会执行')

四、触发异常

(一)抛出系统异常

while True:
    name=input('请输入姓名:')
    try:
        if len(name)<2:
            raise Exception('错误')
    except Exception as f:
        print(f)
        break

(二)抛出自定义异常

class MyExcept(Exception):
    def __init__(self,xx):
        self.xx=xx
    def __str__(self):
        return self.xx
try:
    raise MyExcept('天上下雨了')
except MyExcept as f:
    print(f)
class ShortExpection(Exception):
    def __init__(self,length,at_least_len):
        self.length=length
        self.at_least_len=at_least_len
    def __str__(self):
        return '您输入了{}个字符,最少要{}个字符'.format(self.length,self.at_least_len)
t=input('请输入字符串:')
try:
    raise ShortExpection(len(t),10)
except ShortExpection as f:
    print(f)

五、设计模式

(一)单例模式

class A():
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls,'xIns'):
            cls.xIns=object.__new__(cls)    # 产生一个此类的对象
        return cls.xIns
    def __init__(self,name):
        self.name=name
zs=A('张三')
print(A.xIns.name)
ls=A('李四')
print(A.xIns.name)
print(zs.name)
print(zs is ls)

(二)工厂模式

class Bmw():
    def run(self):
        print('宝马在跑')
class Benc():
    def run(self):
        print('奔驰在跑')
class Audi():
    def run(self):
        print('奥迪在跑')
class Factory():
    @staticmethod
    def makeCar(name):
        if name=='宝马':
            return Bmw()
        elif name=='奔驰':
            return Benc()
        else:
            return Audi()
a=Factory.makeCar('宝马')
b=Factory.makeCar('奔驰')
c=Factory.makeCar('奥迪')
a.run()
b.run()
c.run()

(三)观察者模式

class Boss():
    def __init__(self):
        self.observers=[]
        self.status=''
    # 绑定观察者
    def attach(self,ob):
        self.observers.append(ob)
    # 通知观察者
    def notify(self):
        for ob in self.observers:
            ob.update()
class Employee():
    def __init__(self,name,boss):
        self.name=name
        self.boss=boss    # 绑定通知者
    def update(self):
        print('{},{}赶快工作'.format(self.boss.status,self.name))
if __name__=='__main__':
    ljc=Boss()
    # 互相绑定
    zs=Employee('张三',ljc)
    ls=Employee('李四',ljc)
    ljc.attach(zs)
    ljc.attach(ls)

    ljc.status='李嘉诚回来了'
    ljc.notify()

(四)策略模式

class CashNorm():
    def accept_money(self,money):
        return money
class Cash_rate():    # 打折
    def __init__(self,rate):
        self.rate=rate
    def accept_money(self,money):
        return self.rate*money
class Cash_condition():    # 满减
    def __init__(self,condition,ret):
        self.condition=condition
        self.ret=ret
    def accept_money(self,money):
        if money<self.condition:
            return money
        else:
            return money-money//self.condition*self.ret
class Context():
    def __init__(self,style):
        self.style=style
    def getResult(self,money):
        return self.style.accept_money(money)
if __name__=='__main__':
    a={}
    a[0]=Context(CashNorm())
    a[1]=Context(Cash_rate(0.8))
    a[2]=Context(Cash_condition(300,50))
    style=int(input('请输入优惠方式:'))
    if style>2:
        style=0
    money=float(input('请输入金额:'))
    print(a[style].getResult(money))

扩展题

用mkdir实现makedirs

import os
a=input("请输入想要创建的多层文件,以'/'分隔:")
lst=a.split('/')
for i in range(len(lst)):
    if not os.path.exists(lst[i]):
        os.mkdir(lst[i])
    os.chdir(lst[i])

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值