一、文件操作
1.基本过程:打开文件 ---->文件操作 ----> 关闭文件
2.open(路径,打开方式,编码(encoding=编码方式))
- a.路径:绝对路径(了解);相对路径:(./相对路径,../,.../)
- b.打开方式:r(读),rb/br(读二进制)
w(覆盖),bw/wb(写二进制),a(追写内容) - 注意:路径不存在的时候,读的形式打开会报错。写的形式打开会自动新建文件
- c.设置编码:utf-8(使用率99.9%),gbk
- 注意:如果是以二进制的形式打开(rb/br)或写(wb/bw)的方式打开文件,不能设置编码方式
3.文件的读和写
read()/readline()---读
write()--- 写
4.关闭
f.close()
'''
1.打开文件和关闭文件的简写方式(常用的):
with open() as 文件变量名:
文件操作
文件打开操作完成后,会自动关闭文件
'''
if __name__ == '__main__':
with open('./TIM图片20180903095326.png','rb') as f:
# bytes是python中内置的数据类型,来表示二进制数据
content = f.read()
print(content)
# 将二进制数据写入文件(下载图片)
with open('./魏世强.png','wb') as ff:
ff.write(content)
二、json文件
定义:
- json是有特定格式的一种文本形式,它有自己的语法
- json文件后缀是 .json的文本文件
- json不同于python 代码用双引号
1.json格式对应的数据类型及其表现
- a.一个json文件中只能存一个数据,这个数据的类型必须是以为类型中的一个
- b.python对json数据的支持
类型 | 格式 | python |
---|---|---|
对象(object) | {"abc":10,"b":[1,2]} | 字典(dict) |
数组(array) | [100,"abc",true,[1,2]] | 列表(list) |
数字(number) | 0,100,2.1,-200 | 整型(int)浮点型(float) |
字符串(string) | "abc","hello json" | 字符串(str) |
布尔(bool) | true/false(必须小写) | 布尔(bool)/True,False |
特殊值(Null) | null | None |
1.load(json文件对象): 以json的格式,获取文件中的内容。将内容转换成相应的python数据
2.loads(json格式内容的字符串, 编码方式):将json格式的字符串,转换成python对应的数据
3.dump(需要写入json文件中的python数据, json文件对象)
4.dumps(需要转换成json格式字符串的python数据)
# json模块是python中内置的,专门用来处理json数据的一个模块
import json
if __name__ == '__main__':
# 1.json转python数据
"""
with open('./files/json1.json', 'r', encoding='utf-8') as f:
content = json.load(f)
print(content)
print(type(content))
content1 = json.loads('{"a":100, "abc":true}', encoding='utf-8')
print(content1, type(content1))
"""
with open('./files/new.json', 'w', encoding='utf-8') as f:
json.dump({'a':100, 'hn': 200, 'abc': None}, f)
# json.dump([1, 2, 3, 'abc'], f)
# json.dump((1, 2, 'abc', 100, True), f)
# 注意:python中集合不能转换成json数据
# json.dump({11,22,'aa'}, f)
# 将python数据,转换成json字符串
json_str = json.dumps([2, 3, 4, 'abc', True, None])
print(json_str, type(json_str))
# 练习,用json文件来保存一个班的班级信息,包括班级名和班上的所有的学生(名字、年龄和电话)
# 输入学生信息添加学生
# 根据姓名删除学生
# (做到数据持久化)
"""
json文件的数据格式
{
"class_name":"班级名",
"all_students":[
{"name":"名字", "age":年龄, "tel":"电话"},
{"name":"名字", "age":年龄, "tel":"电话"},
{"name":"名字", "age":年龄, "tel":"电话"}
]
}
"""
# 1.读出保存班级信息对应的json文件中的内容
with open('./files/class_info.json','r', encoding='utf-8') as f:
class_content = json.load(f)
print(class_content)
# 2.输入信息添加数据
name = input('姓名:')
age = input('年龄:')
tel = input('电话:')
stu = {"name": name, "age": int(age), "tel": tel}
class_content['all_students'].append(stu)
# class_info = {
# 'class_name': 'python1806',
# 'all_students': [
# stu
# ]
# }
# 3.将最新的数据写入文件中
with open('./files/class_info.json', 'w', encoding='utf-8') as f:
json.dump(class_content, f)
数据的持久化:
1.将数据从文件中读出来
2.修改数据(增、删、改)
3.将新的数据再写入文件中
三、异常捕获
1.
异常:程序崩溃了,报错了....
程序出现某种异常,担是不想因为这个异常而让程序崩溃。这个时候就可以使用异常捕获机制
2.怎么捕获异常
形式 | try | except | except | finally | 其他语句 |
---|---|---|---|---|---|
形式1(捕获所有异常) | 需要捕获异常的代码块(可能会出现异常的代码块) | 出现异常后执行的代码 | √ | ||
形式2 | √ | 加错误类型 | √ | ||
形式3 | √ | 加(错误类型1,错误类型2....) | √ | ||
形式4 | √ | 加(错误类型1) | 加(错误类型2) | √ | |
形式5 | √ | 出现异常后执行的代码 | 不管有没有异常都会执行(就算崩溃了也会执行)(在这儿做程序异常退出时的善后,一般做保存数据和进度的工作) | √ |
注意:
形式1:
- 执行过程: 执行try后面的代码块,一旦遇到异常,就马上执行except后面的代码块。执行完后再执行其他的语句。
- 如果try里面的代码块没有出现异常,就不执行except后面的代码块,而是直接执行其他语句
形式2: - 执行过程: 执行try后面的代码块,一旦遇到指定的错误类型的异常,就马上执行except后面的代码块。执行完后再执行其他的语句。
- 如果try里面的代码块没有出现指定的异常,就不执行except后面的代码块,而是直接执行其他语句
3.抛出异常(后面补充)
raise 错误类型
if __name__ == '__main__':
import json
# 抛出异常,让程序主动崩溃
num = input('请输入一个奇数:')
if int(num) % 2 == 0:
raise KeyError
try:
print('abc')
print([1,2,3][4])
print(int('abc'))
except ValueError:
print('出现异常')
finally:
print('最后的语句')
# 1.什么情况....
# a.输入两个数,然后求这个两个数的商是多少
num1 = float(input('除数:'))
num2 = float(input('被除数:'))
print('%f / %f = %f' % (num1, num2, num1/num2))
# b.打开一个不存在的文件,不希望程序崩溃,只是让读出的内容是空
with open('./files/info.json', 'r', encoding='utf-8') as f:
content = json.load(f)
# 2.捕获异常
# try-except
a = [1, 2, 3, 4, 5]
try:
print(int('abcd'))
print(a[6])
except:
print('下标越界')
print('===========')
dict1 = {'a':1, 'b': 2}
try:
print(a[6])
dict1['c']
except IndexError:
print('下标越界2')
except KeyError:
print('key错误')