第四章 Python文件操作和异常

  • Post author:
  • Post category:python




一、文件操作

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()



版权声明:本文为weixin_44138966原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。