python文件与异常

六、文件操作

6.1、文件的打开和编码

1)编码:编码有很多,只有编码和解码使用的编码格式相同的时候才会正常的进行读和写

UTF-8是目前全球通用的编码格式,除非有特殊要求,否则一律使用UTF-8的文件编码

2)打开文件:使用open()函数,open函数可以打开一个以经存在的文件,或者创建一个新文件

语法:open(name,mode,encoding)

  • name :要打开的文件名(可以包含文件的具体路径)

  • mode:设置文件的打开模式(只读,写入,追加等)

  • encoding:编码格式(推荐使用UTF-8)

# 打开文件
f = open("python.txt",'r',encoding='UTF-8')
# f 是open文件函数的对象,且encoding的顺序不是第三位,不能使用位置参数,用关键字参数直接指定

文件模式:

  • r:以只读方式打开,文件的指针将会放到文件的开头,这是默认模式

  • w:打开文件用于写入,如果文件以经存在,指针会从头开始,原有内容会被删除,如果文件不存在,则会创建新文件

  • a:打开文件用于追加,如果文件存在,新的内容将会写到已有内容之后,如果文件不存在,就会创建新文件进行写入

文件的关闭:文件对象.close()方法

6.2、文件的读取

注意:一个文件操作中如果多次调用读取方法,指针会从上一次r读取结束时开始

1)read()方法:有参数表示从文件中读取的数据长度(单位字节),无参数,表示读取文件的所有数据

# 格式:文件对象.read()
​
# 打开文件
f = open("文件名",'r',encoding='UTF-8')
​
# 读取文件
element = f.read()
​
# 关闭文件
f.close()

2)readlines()方法:可以按照行的方式把整个文件的内容进行一次性读取,并且返回一个列表,每一行的数据为一个元素

# 格式:文件对象.readlines()
​
f = open("文件名",'r',encoding='UTF-8')
# 读取文件
element = f.readlines()
​
# 关闭文件
f.close()

3)readline()方法:一次读取一行内容(遇到换行符结束一行)

# 格式:文件对象名.readline()
​
f = open("文件名",'r',encoding='UTF-8')
# 读取文件
element = f.readline()
print(f"第一行:{element}")
element = f.readline()
print(f"第二行:{element}")
​
# 关闭文件
f.close()

4)for循环读取文件:

# 每一个line临时变量,就记录了文件的一行数据
for line in open("文件名",'r'):
    print(line)
    
# 关闭文件
f.close()

5)with open语法:操作完成后自动关闭文件

# 语法:with open("文件名","r")as 文件对象:
​
with open("文件路径",'r') as f:
    f.readlines()

6.3、文件的写入和追加

# 打开文件
f = open("文件名",'w',encoding='UTF-8')
​
# 文件写入
f.write("内容")
​
# 内容刷新
f.flush()
​
# 关闭文件(内置了flush方法,可以只写close方法)
f.close()
  • 注意:直接调用write,内容并未真正写入文件,而是积攒在内存中,称为缓冲区,当调用flush的时候,才会真正的写入文件中,这样可以避免频繁操作硬盘,导致效率下降

  • 文件的追加:只需将模式改成"a"模式

6.4、案例

  # 写入数据
    def write_infor(self):
        try:
            file = open("./students.txt", 'w', encoding='utf-8')
        except:
            print("文件更新失败!")
        else:
            print("正在更新文件信息········")
            time.sleep(3)
            # 将类对象转为字典类型存入文件------格式:类对象.__dict__
            dict_infor = [item.__dict__ for item in self.student_list]
            file.write(str(dict_infor))
            print("更新成功········")
            file.close()
    
    # 读取文件数据
    def read_infor(self):
        try:
            file = open("./students.txt", 'r', encoding='utf-8')
        except:
            print("文件不存在!无法加载数据,请先进行添加数据,更新文件信息·······")
        else:
            print("正在读取文件信息········")
            time.sleep(3)
            # 文件中读取的数据都是字符串嵌套列表嵌套字典,使用eval将其转化为列表,在使用for取出字典的值转换为类对象
            new_list = eval(file.read())
            self.student_list = [Student(item['id'], item['name'], item['age'], item['gender'], item['tel']) for item in new_list]
            print("文件读取成功~~~")
            file.close()

七、异常处理与模块

7.1、捕获异常

# 基本语法:(相当于捕获全部异常)
try:
  可能发生错误的代码
except:
  出现异常执行的代码

1)捕获指定异常:如果出现的异常类型和要捕获的异常类型不一致,就无法捕获

# 基本语法:
try:
    可能发生错误的代码
except 异常类型 as 别名:
  出现异常执行的代码   

注意:这里的别名输出出来就是异常出现的原因

2)捕获多个异常:将要捕获的异常以元组的方式书写在except后面,逗号隔开

# 基本语法:
try:
  可能发生的错误代码
except (类型1,类型2) as 别名:
  出现异常执行的代码

3)捕获全部异常:

# 基本语法:
try:
  可能发生的错误代码
except Exception as 别名:
  出现异常执行的代码

4)异常else:表示如果没有出现异常所执行的代码

# 语法:
try:
  可能发生的错误代码
except Exception as 别名:
  出现异常执行的代码
else:
  没有出现异常执行的代码

5)异常finally:表示无论有无异常都要执行的代码(例如:关闭文件)

# 语法:
try:
  可能发生的错误代码
except Exception as 别名:
  出现异常执行的代码
else:
  没有出现异常执行的代码
finally:
  无论如何都要执行

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值