Json和文件操作
补充:抛出异常
主动让程序崩溃。
raise 异常类型
说明
raise : 关键字;固定写法
异常类型: 系统提供的异常类型(IndexError,TypeError)
自定义错误类型(自定义错误类型必须是Exception的子类)
# 1. 定义input_pswd函数,提示用户输入密码,如果用户输入长度 < 8, 抛出异常,如果用户输入长度 >=8 <=15,且包含(~!@#%^*)中的至少两个字符,返回输入的密码。
def input_pswd():
pw = input('请输入密码:')
# 密码长度小于8
if len(pw) < 8:
raise PasswordError
# 密码长度在8到15
if 8 <= len(pw) <= 15:
new_str = ''
for x in pw:
if x in '~!@#%^*' and x not in new_str:
new_str += x
if len(new_str) >= 2:
return pw
raise PasswordError
# 密码长度大于15
return pw
print(input_pswd())
Json数据
Json
json和xml都是通用数据格式,用于不同编程语言之间的数据交流(网络数据传输或文件数据共享)。
json相对xml更小更轻效率更高、传送速度更快;xml相对来说安全性最高。
数据格式
一个json有且只有一个数据,并且这个唯一数据必须是json支持的类型的数据。
– | – |
---|---|
数字 | 整数和小数: 123、23.5、3e5 |
字符串 | 必须用双引号引起来: “abc” |
布尔 | 小写的true和false |
空值 | null(不是None!) |
数组(列表) | 相当于Python的列表: [数据1,数据2,…] |
字典 | 相当于Python的字典,键只能是字符串: {键1:值1,键2:值2,…} |
Python数据和Json数据之间的转化
python提供了json模块专门用来处理python中的json数据
Json转Python
–json | –python |
---|---|
数字 | 数字 |
字符串 | 字符串(双引号变单引号) |
布尔 | 布尔(true -> True , false -> False) |
空值 | 空值(null -> None) |
数组(列表) | 列表 |
字典 | 字典 |
对应函数
json.loads(json格式字符串)
将json格式字符串对应的json数据转换成Python数据。
**!**json格式字符串:字符串内容是json数据的字符串。
content = open('data.json', encoding='utf-8').read()
result = json.loads(content)
print(result) # {'name': 'lxl', 'age': 22}
# result = json.loads("abc") # 报错,字符串内容是abc,不是合法的json数据
result = json.loads('"abc"')
print(result) # abc str类型
result = json.loads("100")
print(result) # 100 int类型
result = json.loads("true")
print(result) # True bool类型
Python转Json
–python | -json |
---|---|
int,float | 数字 |
str | 字符串(双引号变单引号) |
bool | True -> true , False -> false |
None | null |
列表、元组 | 数组 |
字典 | 字典 |
对应函数
json.dumps(Python数据)
将指定Python数据转换成对应的json格式字符串。
json.dumps(100) # 'abc'
json.dumps('abc') # '"abc"'
json.dumps(True) # true
result = json.dumps({'a': 10, 20: 30, 'name': 'xiaoming', 'isMarried': True})
print(result, type(result)) # {"a": 10, "20": 30, "name": "xiaoming", "isMarried": true} <class 'str'>
xiaoming', 'isMarried': True})
print(result, type(result)) # {"a": 10, "20": 30, "name": "xiaoming", "isMarried": true} <class 'str'>