• Python学习笔记——文件操作、异常捕获、模块


    • 食用说明:本笔记适用于有一定编程基础的伙伴们。希望有助于各位!

    文件读取

    文件操作比较常见,通常我们需要对文件进行读取操作:

    1. f1 = open('assets/Files/测试文件.txt', 'r', encoding='UTF-8')
    2. # 辨别是否可读
    3. print(f1.readable())
    4. # 读取具有连贯性,每次读取一行固定字节,无参数时读取所有内容
    5. print(f1.read(5))
    6. # 读取文件行,读取具有连贯性,每次读取一行固定字节,无参数时读取一整行
    7. print(f1.readline(2))
    8. # 读取文件行,读取具有连贯性,无参数读取所有内容,并返回列表,有参数时即读取的行数,同样返回列表
    9. print(f1.readlines(1))

    通常情况下,我们会对文件循环进行读取,或是对文件所有内容读取后逐步分析:

    1. fileLinesList = f1.readlines()
    2. f1.close()
    3. i1 = iter(fileLinesList)
    4. while True:
    5. try:
    6. print(next(i1))
    7. except StopIteration:
    8. print('文件读取完毕')
    9. break
    • 上面的语句是简单的文件读取方式,对读取到的文件行列表进行迭代
    文件写入

    读取和写入的形态类似,具体操作如下:

    1. f1 = open('assets/Files/测试文件.txt', 'r+', encoding='UTF-8')
    2. print(f1.writable())
    3. f1.seek(0, 2)
    4. newLinesList = ["Hello world1\n", "Hello world2\n", "Hello world3\n", "Hello world4\n"]
    5. for item in newLinesList:
    6. f1.write(item)
    7. f1.seek(0)
    8. print(f1.read())

    具体的读写模式:

    一个综合运用:

    1. infoList = [
    2. {"name": "Polaris", "age": 18, 'sex': '男'},
    3. {"name": "PolarisX", "age": 19, 'sex': '男'},
    4. {"name": "PolarisY", "age": 20, 'sex': '男'},
    5. {"name": "PolarisZ", "age": 21, 'sex': '女'},
    6. ]
    7. f1 = open('assets/Files/info.txt', 'w', encoding='UTF-8')
    8. # 写入标头
    9. for key in infoList[0].keys():
    10. f1.write(key)
    11. f1.write('\t')
    12. f1.write('\n')
    13. # 写入数据
    14. for item in infoList:
    15. for key in item.keys():
    16. f1.write(str(item[key]))
    17. f1.write('\t')
    18. f1.write('\n')
    19. if f1.readable():
    20. print(f1.read())
    • 上面的例子中,我们将一个表数据写入到了文件中 
    异常捕获

    我们在运行程序时,常会遇到各种异常导致程序中断,解决方式如下:

    1. try:
    2. f1 = open('assets/Files/abc.txt', 'r', encoding='UTF-8')
    3. except Exception as e:
    4. print(COLOR.RED + '文件读取失败')
    5. print(COLOR.BLUE + str(e))
    • 当我们希望打开一个文件时,而此文件不存在时,会报错,为了捕获此异常可以通过try...except来取得异常
    • 此处使用Exception捕获所有异常,并使用as进行别名,
    • 具体的异常有很多,具体可以查看官方文档:具体异常
    1. try:
    2. f1 = open('assets/Files/abc.txt', 'r', encoding='UTF-8')
    3. except Exception as e:
    4. print(COLOR.RED + '文件读取失败')
    5. print(COLOR.BLUE + str(e))
    6. else:
    7. print(f1.read())
    8. finally:
    9. print(COLOR.WHITE + '文件读取操作完毕')
    •  异常未触发时会进入else语段
    • finally为必定触发语段,无论是否触发异常
    生成一个异常

    当然有的时候我们希望中断程序,提示异常:

        raise Exception('自定义异常')
    • 我们需要在Exception方法中填写异常内容,用于中断程序时的异常提示
    断言异常

    断言异常用于简化普通的判断异常:

    1. # 当变量大于5时,报错
    2. num1 = 10
    3. # 常规的判断
    4. if num1 >= 5:
    5. raise Exception('变量大于5')
    6. # 快捷的判断
    7. assert num1 < 5, '变量大于5'
    • 上处代码,就是一个简单断言异常,其格式可以等效于:

    语法格式如下:

    assert expression

    等价于:

    if not expression:
        raise AssertionError
    模块的导入

    • 在导入操作时,我们使用from module import * 可以通过在模块中加入‘__all__’变量定义来限制全导入方式,具体意义如下: 
    1. __all__ = [
    2. 'add',
    3. ]
    4. def add(*args):
    5. return sum(args)
    6. def minus(mainNum, *subNums):
    7. return mainNum - sum(subNums)
    • 上面的这串代码定义两个方法,我们希望只导出add,故将其加入到all变量中,当我们使用from module import *时就会限制minus方法无法被使用,但如果使用其他方式依旧可以导入此方法
    python包

  • 相关阅读:
    客观题:Android基础【基础题】
    【无标题】
    mac M1 安装AndroidStudio打开真机调试
    2316. 统计无向图中无法互相到达点对数(leetcode)并查集-------------------Java实现
    剑指offer64 求1+2+3+...+n
    【python笔记】第八节 函数基础
    07 Tomcat 请求处理流程详解,Tomcat 请求流程设计架构
    vue-router的基本用法
    iwemeta元宇宙:宇宙网红,马斯克年度“吹牛大会”!10年卖1亿辆车,“擎天柱”机器人年底量产
    OD机考真题:MELON的难题
  • 原文地址:https://blog.csdn.net/HAC_SOUL/article/details/133921492