1. 文件的介绍
文件操作: 使用代码来读写文件
文件:可以存储在长期存储设置(硬盘,u盘)上的一段数据即为文件
1) 计算机只认识 二进制数据(0和1)
2) 所有的文件在计算机中存储的形式都是二进制即0和1,打开文件看到的文字不是0和1, 原因是打开文件的软件会自动的将二进制转换为文字
文本文件:比如txt,py,md,json等, 可以使用记事本软件打开
二进制文件:比如音频文件mp3,视频文件 mp4,图片png,jpg,gif,exe等。
2. 文件操作的步骤
1) 打开文件
2)读写文件
3)关闭文件
2.1 打开文件 open()
方式一: open(file,mode='r',encoding=None)
--file 表示要操作的文件的名字,可以用相对路径和绝对路径
--mode 打开文件的方式
- r 只读打开, read,如果文件不存在会报错
- w只写打开, write,如果文件存在,会覆盖原文件
- a 追加打开, append,在文件的末尾写入新的内容
--encoding 编码格式,指二进制数据和汉字转换的规则
- utf-8(常用):将一个汉字转换为3个字节的二进制
- gbk:将一个汉字转换为2个字节的二进制
返回值:一个文件对象, 后续对文件的操作,都需要这个文件对象
方式二:文件打开的另一种写法(推荐)
with open(file,mode,encoding) as 变量:
pass
#使用这种写法打开文件, 会自动进行关闭, 不用手动书写关闭的代码。
with open("a.txt","a",encoding='utf-8') as f:
f.write('good')
2.2 关闭文件 close()
关闭文件,如果是写文件,会自动保存
2.3 读文件 read()
变量 = 文件对象.read()
返回值:返回读取到的文件内容, 类型是字符串
2.4 写文件 write()
参数:写入文件的内容,类型是字符串
2.5 按行读取文件 readline()
一次读取一行的内容, 返回读取到的内容,如果是读到文件末尾,返回的都是空字符串
读取大文件
with open("a.txt","r",encoding='utf-8') as f:
while True:
buf = f.readline()
if buf == "":
break
else:
print(buf,end='')
3. json 文件
1)本质是文本文件, 可以直接使用read 和 write进行操作
2)json文件比较特殊, 比较像python中的字典和列表
例:我叫⼩明,我今年 18 岁,性别男, 学校 空, 爱好 听歌,画画, 我的居住地址为 国家 中国, 城市 ⼴州.
{
"name": "xiaoming",
"age": 18,
"isman": true,
"school": null,
"hobbies": ["听歌","画画"],
"home": {
"country": "China",
"city": "GuangZhou"
}
}
3.1 读取json文件
1)可以直接使用read去读,但是想要取到数据很麻烦
2)使用专门的方法去读
导包 import json
json.load(文件对象)-->得到的是列表或者字典
import json
with open("ming.json","r",encoding="utf-8") as f:
# 得到列表或者字典
buf = json.load(f)
print(buf) #{'name': 'xiaoming', 'age': 18, 'isman': True, 'school': None, 'hobbies': ['听歌', '画画'], 'home': {'country': 'China', 'city': 'GuangZhou'}}
print(type(buf)) #<class 'dict'>
print(buf.get("name")) #xiaoming
print(buf.get("home").get("city")) #GuangZhou
4. 异常
程序在运行时,如果python解释器遇到一个错误,则会停止程序的执行, 并且提示一些错误信息,这就是异常。
程序停止执行并且提示错误信息这个动作, 通常称之为:抛出异常(raise)
捕获异常
1)程序在执行时, 如果遇到异常,程序会终止不会继续执行
2)程序遇到异常之后,如果捕获了异常,就可以继续执行
基本语法:
try:
可能发生异常的代码
except: #可以捕获任意类型的异常
发生了异常执行的代码
例子:
# 获取用户从键盘输入的数据
num = input("请输入数字:")
try:
# 转换数据类型为整数
num = int(num)
print(num)
except:
# 当出现错误时,执行下面的
print("请输入正确的数字")
5. 捕获未知类型的异常(使用最多)
try:
可能发生异常的代码
except Exception as 变量:#Exception 常见异常类的父类,变量:异常对象
print(f"发生了异常,{e}")
异常捕获的完整结构
try:
可能发生异常的代码
except 异常类型:
发生了指定类型的异常执行的代码
except Exception as e:
发生了其他类型的异常执行的代码
else:
没有发生异常, 会执行的代码
finally:
不管有没有发生异常, 都会执行的代码
6. 抛出异常
raise关键字的作用, 就是来抛出异常, 让代码终止执行
应用场景:自己书写代码模块, 让别人使用,为了让别人按照你的规定使用你的代码,你就可以在他不满足你条件的情况下, 使用rasie 抛出异常