一、文件操作
1)文件打开:open()函数
语法:open(file=‘文件名称’,mode=‘访问模式’,encoding=‘UTF-8’)
①file:文件名称
②mode:设置打开文件的模式(访问模式:读:r;写:w;追加:a;读+写:w+)
③encoding:编码方法 UTF-8(没有中文可以不写)
注意:可以只打开和关闭文件,不进行任何的读写操作
2)写入文件
①‘w’模式逻辑:如果文件不存在会自动创建;文件所在目录一定要存在;内容追加写入的时候,文件之前的全部内容覆盖;写的时候不要读文件
语法:对象.write(‘内容‘’)
# mode = 'w' 如果文件不存在会自动创建文件
# f = open(file='test.txt',mode='w',encoding='UTF-8')
f = open('test.txt','w','UTF-8')
f.write('欢迎来到德莱联盟,')
f.close()
②’a’ 模式:追加写入;如果文件不存在会自动创建;文件所在目录一定要存在;内容追加写入的时候,会在文件之前内容加上写入
# mode = ‘a’ 追加写入
f = open(file='test.txt',mode='a',encoding='UTF-8')
f.write('欢迎来到德玛西亚联盟,')
f.close()
③写入文件的绝对路径:路径加r;忽略转义
# 写入文件的绝对路径
# r:路径加r 忽略转义
f = open(file=r'D:\python项目\lesson_0417\file\test.txt',mode='a',encoding='UTF-8')
f.write('绝对路径,')
f.close()
④写入文件的相对路径:
# r:路径加r 忽略转义
f = open(file=r'..\file\test.txt',mode='a',encoding='UTF-8')
f.write('相对路径,')
f.close()
3)读取文件
①read()语法:文件对象.read(num);num 表示要从文件中读取的数据的长度(单位是字节),如果没有传入 num ,那么就表示读取文件中所有的数据。
# 读取文件
# mode = ‘r’ 读取全部文件
f = open(file=r'D:\python项目\lesson_0417\file\test.txt',mode='r',encoding='UTF-8')
print(f.read())
f.close()
②readlines():readlines 可以按照 行 的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
# 按照行来读取文件 一次性读取全部文件列表
f = open(file=r'D:\python项目\lesson_0417\file\test.txt',mode='r',encoding='UTF-8')
print(f.readlines())
f.close()
③readline():依次一次读取一行内容
# 读取文件第几行数据
f = open(file=r'D:\python项目\lesson_0417\file\test.txt',mode='r',encoding='UTF-8')
print(f.readline())
print(f.readline())
f.close()
④读取文件的另外一种写法:with open() as 写文件
with open(file=r'D:\python项目\lesson_0417\file\test.txt',mode='r',encoding='UTF-8') as f:
all = f.read()
print(all)
⑤动态的获取文件的绝对路径:
os.path.abspath(path) 返回绝对路径
os.path.dirname(path) 返回文件路径
os.path.join(path1[, path2[, …]]) 把目录和文件名合成一个路径
# 动态获取当前目录、文件所在路径:绝对路径 判断路径是否存在
import os
print(os.path.dirname(__file__))
print(os.path.abspath(__file__))
print(os.path.exists(r'D:/python项目/lesson_0417/file'))
二、 异常
1)异常捕捉原理:解释器代码报错后不能执行后续代码,为了不干扰后面的代码执行,使用异常捕捉方法
2)捕获异常方法
①捕获异常语法:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
# 异常捕捉
try:
lista = [1,2,3,4]
print(lista[5])
except:
print('索引超出范围')
print(lista)
②捕获具体类型异常语法:
try:
可能发生错误的代码
except 具体异常类型:
如果出现异常执行的代码
③捕获异常描述信息
# 捕获异常具体类型
try:
print(3/0)
except ZeroDivisionError as e:
print(f'分母不能为0:{e}')
④大部分不知道类型错误信息,可以用最大的异常解决(Exception),Exception是所有程序异常类的父类
# 大部分不知道类型错误信息,可以用最大的异常解决(Exception)
try:
print(3/0)
except Exception as e:
print(f'分母不能为0:{e}')
⑤捕获多个异常,可以把要捕获的异常的名字,放到except后,并使用元组的方式进行存储
try:
print(1/0)
except (NameError,ZeroDivisionError):
print('有错误')
⑥else用法:else表示的是如果没有异常要执行的代码
# 如果出现异常,后续代码不执行
try:
print(3/0)
except Exception as e:
print(f'分母不能为0:{e}')
else:
print('没有异常可以执行')
⑦finally用法: 表示的是无论是否异常都要执行的代码
# 不管有没有异常 都要执行
try:
print(3/0)
except Exception as e:
print(f'分母不能为0:{e}')
else:
print('没有异常可以执行')
finally:
print('不管有没有异常,我都要执行')
实例场景:异常抛出,并给上一层处理
# 实际场景:抛异常 raise
# x = 10
# if x>5:
# raise Exception(f'x不能大于5,x值:{x}')
# 解决不了问题,抛给上一层
def tester():
try:
print(3 / 0)
except Exception as e:
print(f'分母不能为0:{e}')
raise e
def leaer():
try:
tester()
except Exception as e:
print(f'分母不为0,我可以处理{e}')
leaer()