- 食用说明:本笔记适用于有一定编程基础的伙伴们。希望有助于各位!
文件读取
文件操作比较常见,通常我们需要对文件进行读取操作:
f1 = open('assets/Files/测试文件.txt', 'r', encoding='UTF-8')# 辨别是否可读print(f1.readable())# 读取具有连贯性,每次读取一行固定字节,无参数时读取所有内容print(f1.read(5))# 读取文件行,读取具有连贯性,每次读取一行固定字节,无参数时读取一整行print(f1.readline(2))# 读取文件行,读取具有连贯性,无参数读取所有内容,并返回列表,有参数时即读取的行数,同样返回列表print(f1.readlines(1))
通常情况下,我们会对文件循环进行读取,或是对文件所有内容读取后逐步分析:
fileLinesList = f1.readlines()f1.close()i1 = iter(fileLinesList)while True:try:print(next(i1))except StopIteration:print('文件读取完毕')break
- 上面的语句是简单的文件读取方式,对读取到的文件行列表进行迭代
文件写入
读取和写入的形态类似,具体操作如下:
f1 = open('assets/Files/测试文件.txt', 'r+', encoding='UTF-8')print(f1.writable())f1.seek(0, 2)newLinesList = ["Hello world1\n", "Hello world2\n", "Hello world3\n", "Hello world4\n"]for item in newLinesList:f1.write(item)f1.seek(0)print(f1.read())
具体的读写模式:
一个综合运用:
infoList = [{"name": "Polaris", "age": 18, 'sex': '男'},{"name": "PolarisX", "age": 19, 'sex': '男'},{"name": "PolarisY", "age": 20, 'sex': '男'},{"name": "PolarisZ", "age": 21, 'sex': '女'},]f1 = open('assets/Files/info.txt', 'w', encoding='UTF-8')# 写入标头for key in infoList[0].keys():f1.write(key)f1.write('\t')f1.write('\n')# 写入数据for item in infoList:for key in item.keys():f1.write(str(item[key]))f1.write('\t')f1.write('\n')if f1.readable():print(f1.read())
- 上面的例子中,我们将一个表数据写入到了文件中
异常捕获
我们在运行程序时,常会遇到各种异常导致程序中断,解决方式如下:
try:f1 = open('assets/Files/abc.txt', 'r', encoding='UTF-8')except Exception as e:print(COLOR.RED + '文件读取失败')print(COLOR.BLUE + str(e))
- 当我们希望打开一个文件时,而此文件不存在时,会报错,为了捕获此异常可以通过try...except来取得异常
- 此处使用Exception捕获所有异常,并使用as进行别名,
- 具体的异常有很多,具体可以查看官方文档:具体异常
try:f1 = open('assets/Files/abc.txt', 'r', encoding='UTF-8')except Exception as e:print(COLOR.RED + '文件读取失败')print(COLOR.BLUE + str(e))else:print(f1.read())finally:print(COLOR.WHITE + '文件读取操作完毕')
- 异常未触发时会进入else语段
- finally为必定触发语段,无论是否触发异常
生成一个异常
当然有的时候我们希望中断程序,提示异常:
raise Exception('自定义异常')
- 我们需要在Exception方法中填写异常内容,用于中断程序时的异常提示
断言异常
断言异常用于简化普通的判断异常:
# 当变量大于5时,报错num1 = 10# 常规的判断if num1 >= 5:raise Exception('变量大于5')# 快捷的判断assert num1 < 5, '变量大于5'
- 上处代码,就是一个简单断言异常,其格式可以等效于:
语法格式如下:
assert expression
等价于:
if not expression:raise AssertionError
模块的导入
- 在导入操作时,我们使用from module import * 可以通过在模块中加入‘__all__’变量定义来限制全导入方式,具体意义如下:
__all__ = ['add',
]def add(*args):return sum(args)def minus(mainNum, *subNums):return mainNum - sum(subNums)
- 上面的这串代码定义两个方法,我们希望只导出add,故将其加入到all变量中,当我们使用from module import *时就会限制minus方法无法被使用,但如果使用其他方式依旧可以导入此方法