py第六天:try与文件操作

# coding=utf-8
# try常用于异常处理
# 编程中最多的就是bug,还有bug的孩子报错
# 当遇到这些报错的时候我们可以用try捕获
tryTest = 0
# 用于测试的代码
try:
    # 检测块内的代码报错不
    tryTest /= 0
except:
    # 如果try判断报错,就使用except下面的代码
    print("错了")
try:
    # 检测块内的代码报错不
    tryTest /= 0
except Exception as a:
    # exception是错误类型,a是exception的别名
    print(a)
except ZeroDivisionError:
    # 都可以设置多个except,但是如果匹配了那么不会向下执行
    # exception是错误类型,a是exception的别名
    print("指定捕获类型")
# 多重异常捕获
try:
    tryTest /= 0
except (ValueError, ZeroDivisionError) as a:
    # 要不用exception,哈哈哈
    print(a)
# 还能嵌套?
try:
    tryTest /= 0
except:
    try:
        tryTest /= 0
    except:
        print("嵌套")


# finally:对异常处理,无论是否正确,我们都要释放资源,都会执行finally
# 即便是except中有return也要执行finally
# 如果 finally 块中有 return 或 raise 语句,则它会覆盖 try 或 except 中的返回值或异常。
def func():
    try:
        return 1
    finally:
        return 2  # 这个返回值会覆盖 try 块中的返回值


print(func())  # 输出 2


# 自定义一些异常就是自定义异常类,大公司用,不用管
class 自定义异常(Exception):
    def __init__(self, 异常消息):
        super().__init__(异常消息)


try:
    tryTest /= 0
except Exception as a:
    # raise 自定义异常("不能为0")
    # raise 跟一个异常参数可以抛出异常,通常用于抛出自定义异常
    print(a)
print('''
    为什么会有try?
因为py是解释语言,会一句句的解释执行,所以遇到错误就会终止
为了避免,就有了try
''')
# ------------------------------------------------------
print(f"{"文件操作":*^100}")
# 打开-读写(文本、二进制)-关闭
f = "注意使用了try要在外定义文件,比如finally就会识别不到文件,无法close"
try:  # 可以不要,但是有些时候文件异常退出,使用finally可以保证保存
    f = open('test.txt', 'r+', encoding='utf-8', errors='strict')
    # open('文件路径带扩展名','操作模式',encoding='文件编码',errors='错误时处理方式,ignore表示忽略')
    # 'r':只读模式。如果文件不存在,则抛出 FileNotFoundError。
    # 'w':写入模式。如果文件存在,会清空文件;如果文件不存在,会创建新文件。
    # 'a':追加模式。在文件末尾追加内容。
    # 'b':以二进制模式打开文件(如 rb,wb)。
    # 'x':创建新文件并写入。如果文件已经存在,则抛出 FileExistsError。
    # '+':读写模式,如 'r+'(读写模式,文件必须存在),'w+'(写入模式并清空文件),'a+'(追加读写模式)。
    f.write("你好")
    # 写入数据,写入数据后,文件指针会位于文件末尾,接下来调用 f.read() 将从文件指针当前位置开始读取。
    # writelines:写入一个字符串列表
    f.flush()
    # 确保写入的数据立即被刷新到文件中,而不是留在缓冲区里。
    f.seek(0)
    # 将文件指针移动到文件的开头,以便接下来能够读取整个文件内容。
    ftxt = f.read()
    # 读全文
    # readline读一行,如果在末尾就返回空
    # readlines将文章读入字符串列表,每一行就是一个元素
    print(ftxt)
finally:  #可以不要
    f.close()
#     要注意finally中的f
f = open('b.png', 'rb+')
# 没有ending与error
ff = f.read()
print(ff)
f.close()
# 麻烦啊,为什么要用try,对了可以用with as
print("*"*50)
print(''' 
'
with ... as 是 Python 中的一种上下文管理器语法,主要用于确保资源在使用后能自动释放,避免手动调用 close() 方法或其他清理操作。
with 语句的背后是上下文管理协议,它使用了两个特殊方法:
__enter__():在进入 with 块时调用,返回的值通常被赋给 as 后面的变量。
__exit__():在 with 块结束时(无论是正常退出还是发生异常)调用,用于进行清理操作(如关闭文件、释放锁等)。
常见应用场景:
文件操作:使用 with 确保文件在使用后自动关闭。
数据库连接:确保数据库连接关闭。
线程锁:确保线程锁在使用完后自动释放。
'
''')
print(f"{"开始操作复制文本文件":*^50}")
with open('test.txt', 'r+', encoding='utf-8', errors='ignore') as f:
    # test文件之前就有了所以直接用,注意编码
    ff=f.read()
    with open('test_cp.txt', 'w', encoding='utf-8') as f:
        # test_cp之前没有,所以用w,创建,为什么不要x,因为w会覆盖,x如果有了就报错
        f.write(ff)
        print('文本文件成功')
print(f"{"开始操作复制二进制文件":*^50}")
with open('b.png', 'rb+') as f:
    # 注意rb,注意没有编码也没有error
    ff=f.read()
    with open('b_cp.png', 'wb') as f:
        # 注意wb,没有编码与error
        f.write(ff)
        print('二进制成功')
# 文件目录管理操作(用到os库)
import os
# 目录操作:不写目录位置就操作当前目录
print(os.listdir("../../"))
#查看目录
# os.mkdir("test")
# os.mkdir("test/test1")
# 创建目录
# os.rmdir("test")
# 删除目录(空目录)
# 使用shutil模块可以递归删除多层非空目录
# import shutil
# shutil.rmtree('test')
# 删除多层
print(os.getcwd())
# 获取当前目录
# os.chdir('修改工作目录')
print(os.path.isdir("test"))
#判断是否为目录
print(os.path.isfile('006try与文件操作.py'))
# 判断是否为文件
# 文件操作
# os.remove('test.txt')
# os.unlink('b_cp.png')
# 删除文件:两个都只可以删除文件
os.rename("旧名字","新名字")
# 可以修改文件也可以修改目录
# 要注意,如果新名字是一个存在文件/目录的名字,那么就会由那个存在的覆盖
# 所以建议判断一下,加个衣服(if),案例如下:
if not os.path.exists('目录或者文件位置'):
    os.rename("old","new")
else:
    print("新名字存在了")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值