• Python自动化四--json模块使用,集合操作,函数


    内容:
    1. json模块
    2. 集合操作
    3. 函数
    一,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('密码不合法!')
    
    三,函数

    函数定义规则:

    1. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
    2. 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
    3. 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    4. 函数内容以冒号起始,并且缩进。
    5. return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

    函数定义实例

    def say(name,sex='男'):    #函数,形参,形式参数,变量
    	#必填参数 位置
    	#默认值参数 非必填
    	print('%s 哈哈哈  性别%s'%(name,sex)  )  
    	#函数体
    

    局部变量与全局变量:在函数里面的变量全都是局部变量,它只能在函数里面使用,函数执行结束那么没有这个变量

    return:如果需要用到函数的处理结果的话,那么就写return,不需要的话,那就不用写,函数里面如果碰到return,函数立即结束

    校验输入字符串为小数的程序--小例子

    1. 只有一个小数点 判断小数点个数
    2. 正小数的情况下,小数点左边和右边都是整数的话,才合法 [0 ,12]
    3. 负小数的情况下 小数点右边整数,左边 必须以负号开头,只有一个负号。
    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
    
  • 相关阅读:
    [Luogu1993] 小K的农场
    [Noip2013] 车站分级
    [Noip2003]加分二叉树
    [Luogu3797] 妖梦斩木棒
    UPC 6616 Small Mulitple
    STL容器之优先队列
    Dijkstra和Floyd算法
    最短路径问题---Dijkstra算法详解
    并查集
    洛谷 P1217
  • 原文地址:https://www.cnblogs.com/tudouxifan/p/9185115.html
Copyright © 2020-2023  润新知