json数据格式

day 15 summary

json数据

  1. 什么是json数据 ? :json是一种通用的数据格式,主要用于不同语言之间的数据传输。

json数据格式要求:
1)有且只有一个数据 2)唯一的这个数据必须是json支持的数据类型的数据

json支持的数据类型:
数字类型 - 包含所有的数字,表示的时候直接写,例如:90、12.5、-23、3e4
字符串 - 用双引号引起来的数据(只能是双引号), 例如: “你好”、 “hello!”、 “abc\n123”
布尔 - 只有true和false两个值,表示的时候直接写,例如:true、false
空值 - null
数组 - 相当于列表, 例如: [元素1, 元素2,…]
字典 - {键1: 值1, 键2: 值2,…}, 键只能是字符串
2.python数据和json之间的相互转换

python中提供了一个系统模块:json,专门用来处理json和python之间的相互转换。

1)json转python

“”"
json -> python
数字 int、float
字符串 str (可能会将双引号变成单引号)
布尔 bool, true -> True、false -> False
null None
数组 list
字典 dict

json.loads(json格式的字符串) - 将json格式的字符串中的内容转换成python数据
json格式的字符串 - 指的是字符串内容是json数据的字符串。(字符串去掉引号后本身就是一个合法json数据的字符串)
‘abc’ -> 不是
“abc” -> 不是
‘“abc”’ -> 是
‘true’ -> 是

import json

result = json.loads('100')
print(result, type(result))    # 100 <class 'int'>

result = json.loads('"abc"')
print(result, type(result))     # abc <class 'str'>

result = json.loads('{"a": 100, "b": 200, "c": true, "d": null}')
print(result, type(result))     # {'a': 100, 'b': 200, 'c': True, 'd': None} <class 'dict'>
  1. python转json

“”"
python -> json
int、float 数字
str 字符串(引号会变成双引号)
bool 布尔:True -> true、False -> false
None null
list、tuple 数组
dict 字典(key会加双引号)

json.dumps(python数据) - 将python数据转化成json格式的字符串

result = json.dumps(100)
print(result, type(result))    # '100'

result = json.dumps([100, 'abc', True, None])
print(result, type(result))    # '[100, "abc", true, null]'

result = json.dumps({'a': 10, 10: 20, 30: 30})
print(result, type(result))   # {"a": 10, "10": 20, "30": 30} <class 'str'>

2.异常捕获

异常捕获就是让程序在出现异常的时候,程序不崩溃还可以接着往后执行。

注意:不是什么时候都需要捕获异常的,而是程序员知道这个地方可能会出现异常,但是又没有办法通过修改自己的代码来避免这个异常

(因为使用者使用不当导致的异常),这个时候才需要对异常进行捕获。

age = int(input(‘请输入一个年龄(整数):’))

print(age)

  1. 捕获异常

“”"
方式一 - 捕获所有类型的类型
try:
代码段1(需要捕获异常的代码)
except:
代码段2(捕获到异常后会执行的代码)
其他代码

执行过程:先执行代码段1,如果执行过程没有出现异常不会执行代码段2,直接执行后面的其他语句;
如果执行代码段1的时候出现异常,直接执行代码段2,执行完代码段2再执行后面的其他语句。

方式二 - 捕获指定类型异常
try:
代码段1(需要捕获异常的代码)
except 异常类型:
代码段2(捕获到异常后会执行的代码)
其他代码

方式三 - 同时捕获多种异常,针对不同的异常做相同的处理
try:
代码段1
except (异常类型1, 异常类型2, 异常类型3,…):
代码段2

方式四 - 同时捕获多种异常,然后针对不同的异常做不一样的处理
try:
代码段1
except 异常类型1:
代码段11
except 异常类型2:
代码段22
except 异常类型3:
呆段33

print('==============方式1=============')
try:
    print('123')
    print('abc'[10])
    print('456')
except:
    print('出现异常')

print('end')

try:
    age = int(input('请输入年龄:'))
    if age > 18:
        print('成年!')
    else:
        print('未成年~')
except:
    print('年龄输入有误,请输入整数!')


print('===================方式2=================')
try:
    print([10, 20][3])
    print({'abc': 10}['a'])

except IndexError:
    print('出现异常

4.finally - 写遗书

“”"
try:
需要捕获异常的代码段
except:
捕获到异常后需要执行的代码段
finally:
代码段

finally后面的代码段不管try后面发生了什么都会执行:
1)try后面的代码没有异常, 代码段会执行
2)try后面的代码出现异常被捕获到,代码段会执行
3)try后面的代码出现异常没有捕获到,代码段会执行
“”"

print('===================finally=================')
try:
    # print('abc'[3])
    print('abc')
except KeyError:
    print('捕获到异常')
finally:
    print('写遗书')

5.抛出异常

主动让程序崩溃

语法: raise 异常类型

class AgeError(Exception):
    def __str__(self):
        return '年龄值错误,年龄的有效范围是0~200!'


age = 367
if age > 200 or age < 0:
    raise AgeError

# if age > 200 and 200 < 0
# if age > 200 < 0:
#     raise AgeError


# if age >=0 and age <= 18:
# if 0 <= age <= 18:

import re

tel = input(‘请输入手机号:’)

result = re.fullmatch(r’1[3-8]\d{9}’, tel)

print(result)

message = ‘msh12海事局340计算机上7水电费’

message = ‘msh+海事局+计算机上+水电费’

result = re.sub(f’\d+’, ‘+’, message)

print(result)

1.什么是正则表达式

正则表达式是处理字符串数据的问题的工具(可以让很多复杂的字符串问题变得简单)

from re import fullmatch

fullmatch(正则表达式, 字符串) - 让正则表达式和字符串进行完全匹配,如果匹配失败返回None

正则表达式: r’正则表达式’ - python; /正则表达式/ - js

2.正则语法(不是python特有的,在不同语言中使用语法大同小异)

  1. 普通字符 - 在正则表达式中表示符号本身的字符。

  2. . - 匹配一个任意字符

r’abc.’ - 匹配一个字符串前是三个字符分别是a、b和c,最后一个字符是任意字符。

result = fullmatch(r'abc.', 'abca')
print(result)

# r'1..2'  - 匹配一个字符有4个字符,第一个字符是1,最后一个字符是2,中间两个任意字符
result = fullmatch(r'1..2', '1-=2')
print(result)

# 3) \d  -  匹配一个任意数字
# 匹配一个字符串,有4个字符,前三个字符是abc,最后一个字符是任意数字
re_str = r'abc\d'
result = fullmatch(re_str, 'abcm')
print(result)

# 4) \D   -  匹配任意一个非数字字符
re_str = r'x\Dy'
print(fullmatch(re_str, 'x=y'))

# 5) \s  -   匹配任意一个空白字符
# 空白字符  -  凡是能产生空白效果的字符,例如:空格、\n、\t
re_str = r'abc\s123'
result = fullmatch(re_str, 'abc 123')
print(result)

# 6) \S  -  匹配任意一个非空白字符
re_str = r'abc\S123'
print(fullmatch(re_str, 'abc=123'))

# 7) [字符集]  -  匹配字符集的任意一个字符
# 注意:一个[]只能匹配一个字符

# 匹配一个字符串有三个字符,第一个字符是x,最后一个字符是y,中间是1或者m或者n
re_str = r'x[1mn]y'
print(fullmatch(re_str, 'x1y'))
print(fullmatch(re_str, 'xmy'))
print(fullmatch(re_str, 'xny'))

re_str = r'x[mn\d]y'   # 相当于: r'x[mn0123456789]y'
print(fullmatch(re_str, 'xmy'))
print(fullmatch(re_str, 'xny'))
print(fullmatch(re_str, 'x0y'))

re_str = r'x[2-4]y'     # 相当于: r'x[234]y'
print(fullmatch(re_str, 'x2y'))
print(fullmatch(re_str, 'x3y'))
print(fullmatch(re_str, 'x4y'))
print(fullmatch(re_str, 'x5y'))    # None

re_str = r'x[A-Z]y'     # x和y之间是任意一个大写字母
print(fullmatch(re_str, 'xMy'))

re_str = r'x[\da-zA-Z]y'    # x和y之间是一个数字或者字母
re_str = r'x[,\da-z?]y'     # x和y 之间是逗号、问号或者数字或者小写字母

# 8)[^字符集]   -  匹配不在字符集中的任意一个字符
re_str = r'x[^a-z]y'
print(fullmatch(re_str, 'x9y'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值