Python自动化四--json模块使用,集合操作,函数
内容:
- json模块
- 集合操作
- 函数
一,json模块
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。
Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:
- json.dump(): 对数据进行编码。
- json.load(): 对数据进行解码。
json格式存储--小例子
import json
stu_info = { 'laowang':{ 'cars':['BMW','Ben-z'] } }
stu_str = json.dumps(stu_info) #把字典转成json(字符串)
print('json....',type(stu_str))
fw = open('stu.txt','w',encoding='utf-8')
fw.write(stu_str)
fw.close()
fw = open('stu.json','w',encoding='utf-8')
json.dump(stu_info,fw,indent=4) #自动写入字典,存为json格式,单引号自动变为双引号
#存在文件中的json格式为:
{ "laowang":{ "cars":["BMW","Ben-z"] } }
JSON编码的字符串转换回一个Python数据结构
import json
# Python 字典类型转换为 JSON 对象
data1 = {
'no' : 1,
'name' : 'Runoob',
'url' : 'http://www.runoob.com'
}
json_str = json.dumps(data1)
print ("Python 原始数据:", repr(data1))
print ("JSON 对象:", json_str)
# 将 JSON 对象转换为 Python 字典
data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['url']: ", data2['url'])
处理json格式文件
# 读取数据,以UTF-8格式读取文件为中文格式
with open('data.json', 'r',encoding='utf-8) as f:
data = json.load(f)
# 写入JSON 数据
with open('data.json', 'w',encoding='utf-8) as f:
json.dump(data, f,ensure_ascii=False)#避免存入文件中的中文被转为ascii码
json存储用户密码注册文件--小例子
import json
f = open('users.txt','a+',encoding='utf-8') #文件句柄,文件对象
f.seek(0)
all_users = json.load(f)
for i in range(3):
u = input('user:').strip()
p = input('p:').strip()
cp = input('cp:').strip()
if not u or not p:
print('账号、密码不能为空')
elif u in all_users:
print('该用户已经被注册!')
elif u not in all_users and cp==p:
all_users[u]=p
break
f.seek(0)
f.truncate()
json.dump(all_users,f,indent=4)
f.close()
二,集合操作
集合(set)是一个无序不重复元素的序列。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:
parame = {value01,value02,...}
#或者
set(value)
进行集合运算:
list = [1,2,3,4,5,3,6}
list_2 =[2,3,5,7,8]
list=set(list)
list_2 = set(list_2)
print(list.intersection(list_2),'交集 ') #交集 取出重复数据
print(list.union(list_2),'并集') # 并集 去重-统一展示
print(list.difference(list_2),'差集') #差集-取出list中有 list_2 没有
list_3 = set([1,3,6])
print(list_3.issubset(list)) #子集 list_3 的值在list 全有
print(list.issuperset(list_3)) #父集
print(list.symmetric_difference(list_2)) # 对称差集 lsit 和 list_3 互相没有的
a=set(a)
b=set(b)
print(a - b) # a和b的差集
print(a | b) # a和b的并集
print(a & b) # a和b的交集
print(a ^ b) # a和b中不同时存在的元素
集合操作:
list=set(list)
list.add(777) #一次添加一个
list.update([888,999])#同时添加多个
list.remove(999)#删除指定元素
list.pop()#随机删除一个
list.discard(888) # 删除指定元素,若不存在,报错
密码强弱校验--小例子
import string
all_nums = set(string.digits)#数字
lower = set(string.ascii_lowercase)#所有小写字母
upper = set(string.ascii_uppercase)#所有大写字母
punctuation = set(string.punctuation)#所有特殊符号
for i in range(5):
pwd = input('请输入你的密码:').strip()
pwd = set(pwd)
#判断密码是否包含大小写字母和特殊符号
if pwd & all_nums and pwd & lower and pwd & upper and pwd & punctuation:
print('密码合法')
else:
print('密码不合法!')
三,函数
函数定义规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
函数定义实例
def say(name,sex='男'): #函数,形参,形式参数,变量
#必填参数 位置
#默认值参数 非必填
print('%s 哈哈哈 性别%s'%(name,sex) )
#函数体
局部变量与全局变量:在函数里面的变量全都是局部变量,它只能在函数里面使用,函数执行结束那么没有这个变量
return:如果需要用到函数的处理结果的话,那么就写return,不需要的话,那就不用写,函数里面如果碰到return,函数立即结束
校验输入字符串为小数的程序--小例子
- 只有一个小数点 判断小数点个数
- 正小数的情况下,小数点左边和右边都是整数的话,才合法 [0 ,12]
- 负小数的情况下 小数点右边整数,左边 必须以负号开头,只有一个负号。
def check_float(s):
s = str(s)
if s.count('.')==1:
s_list = s.split('.')
left = s_list[0] #小数点左边 # '-98'
right = s_list[1]#小数点右边
#这判断正小数
if left.isdigit() and right.isdigit():
return True
#判断负小数
if left.startswith('-') and left[1:].isdigit() and right.isdigit():
return True
return False