VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • python基础总结(4)

JavaScript Object Notation:Java脚本兑现标记语言。已经成为一种简单的数据交换格式。将数据转换成特殊字符串,不同语言都遵循的一种数据转化格式,用于储存dump()和load()或dumps()和loads()或网络传输dumps()和loads()

json序列化:

import json
s = json.dumps([1,2,3,4,])  #将指定的对象转换成json格式的字符串,仍然放在内存中
print(s,type(s))	#[1, 2, 3, 4] <class 'str'>

#元祖序列化后变成列表
import json
s = json.dumps((1,2,3,4,)) 
print(s,type(s))	#[1, 2, 3, 4] <class 'str'>

#集合不可一被json序列化

#将结果直接写到文件中:json.dump(obj,fb)
with open('a.txt',mode='at',encoding='utf-8') as f:
    json.dump(['1,2,3,'],f)

json反序列化:

import	json
res = json.dumps([1,2,3,])
lst = json.loads(res)

#从文件中反序列化:json.loads(fb)
with open('a.txt',encoding='utf-8') as f:
    res = json.load(f)
  • dump()和load()只能一次性写,一次性读。把需要序列化的对象,通过dumps()和loads()的方式,可实现多次读或写,写入时要换行,才能读出再转化。

    with open('a.txt',mode='wt',encoding='utf-8') as f:
        for i in range(10):
    		f.write(json.dumps()+'\n')
    
    with open('a.txt',encoding='utf-8') as f:
        for i in f:
        	json.loads(i.strip())	#	或json.loads(i),默认去除换行
    

pickle模块

可将python中所有的数据类型转换成字节串

元祖在pickle中转换不会改变类型。

pickle也可以转换set类型

pickle中dump()和load()可以多次读写一个文件dump(s,f)可以写入python中的任何对象(变量、函数、类等)

import pickle
bys = pickle.dumps((1,2,3))  #转化为字节
res = pickle.loads(bys)
print(type(res),res) 	#<class 'tuple'> (1, 2, 3)

#把pickle序列化内容写入文件中:
with open('b.txt',mode='wb') as f:
    pickle.dump([1,2,3],f)
    
    
#从文件中反序列化pickle数据:
with open('b.txt',mode='rb') as f:
    pickle.load(f)
  • pickle与json的比较

    json:

    1. 不是所有的数据类型都可以序列化
    2. 不能多次对同一个文件序列化
    3. json数据可以跨语言。
    4. json序列化只支持部分python数据结构:dict、tuple、int、float、True、False、None

    pickle:

    1. 所有的python类型都能序列化,结果为字节串。
    2. 可以多次对同一个文件序列化
    3. 不能跨语言,只能在python中使用。

hashlib模块

封装一些用于加密的类。加密的目的:用于判断和验证,而非解密。给一个数据进行加密,用另个加密的结果和第一次加密的结果进行对比,如果加密结果想同,说明原文相同。

特点:

  • 把一个大的数据切分成不同的块,分别对不同的块进行加密,再汇总的结果和直接对整体数据加密的结果是一致的。
  • 单向加密,不可逆。
  • 原始数据的一点小的变化,将导致加密结果非常大的差异。

md5加密算法:

import hashlib
#获取一个加密对象
m = hashlib.md5()
#使用加密对象的update进行加密
m.update(b'abc')	#将abc变为字节,若有中文则为'abc'.encode('utf-8')
#通过hexdigest()获取加密。
res = m.hexdigest()
print(res)	#900150983cd24fb0d6963f7d28e17f72

给一个数据加密的步骤:

  1. 获取一个加密对象,不只是有md5,还有sha系列sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512'等,随着sha系列数字越高,加密越复杂,。在创建加密对象时,可以指定参数,使加密程度更高。

    import hashlib
    m = hashlib.md5('abc'.encode('utf-8'))
    m.update('qaz'.encode('utf-8'))
    print(m.hexdigest())
    
    
2.  使用加密对象的`update()`方法进行加密。加密对象可以调用多次(即为把一个大数据切分成小数据,再把小数据进行累次加密,不是对同一个数据多次加密)。都是对**字节**进加密。相同的加密对象将字节转化成**固定长度**的字符串。

3.  通常通过`hexdigest()`获取加密字符串,也可以通过`digest()`获取加密字节串。

不同加密算法的加密结果长度不同,随着加密结果的变长,加密时间也会变长。

​```python
#注册和登录程序
import hashlib
def register():
    username = input('输入用户名:')
    passwd = input("输入密码:")
    get_passwd = get_md5(passwd)    #加密
    with open('login',mode='at',encoding='utf-8') as f:     #写入文件
        f.write(f'{username}|{get_passwd}\n')

def login():
    username = input('输入用户名:')
    passwd = input('输入密码:')
    get_passwd = get_md5(passwd)
    res = f'{username}|{get_passwd}\n'
    with open('login',mode='rt',encoding='utf-8') as f:
        for line in f:
            if res == line:
                return True
        else:return False

def get_md5(passwd):
    m = hashlib.md5('12')	#再次加密
    m.update(passwd.encode('utf-8'))
    return m.hexdigest()

while True:
    op = input('1.注册 2.登录 3.退出')
    if op == '1':
        register()
    elif op == '2':
        res = login()
        if res:
            print('登录成功')
        else:
            print('登录失败,请重新登录')
    elif op == '3':
        break
    else:print("您输入的有误,请重新输入")

文件的校验:

Linux中一切皆文件:文本文件,非文本文件,音频,视频,图片……。无论下载的视频还是国外的软件往往都会有一个md5值。

collections模块

封装了一些常用的容器类。

namedtuple():命名元祖,可以使用属性的方式引用元祖中的数据。

import collections as co:
#namedtuple()的返回值是一个类
Rectangle = co.namedtuple('Rectangle_class',['length','width']) #第一个参数是对类名的说明信息,不能有空格。namedtuple()的返回值是赋值给了自定的类名。
r = Rectangle(10,5)
#通过属性访问元祖的元素
print(r.length)
print(r.width)
#通过引所的方式访问元素
print(r[0])

defaultdict():默认值字典

#defaultdict():(自定义)函数(不能有参数)充当第一个参数
d = co.defaultdict(lambda :'hello',name='aa',age='10')
print(d['na'])	#hello      若无要查询的键,不会报错,会根据函数返回一定的值,且会自动将此键值增加至字典中
print(d)
#defaultdict(<function <lambda> at 0x000001F90D30D378>, {'name': 'aa', 'age': '10', 'na': 'hello'})

Counter():计数器,返回值是字典,必须使用可哈希的数据。

c = co.Counter('asasasasaszszxaxzsxazsx')
print(c)	#Counter({'s': 8, 'a': 7, 'z': 4, 'x': 4})
print(c.most_common(3))		#[('s', 8), ('a', 7), ('z', 4)]

 

若果您对文章内容有疑问,请在评论区留言,如果您有想要补充的新想法,新方法,也请在评论区留言。以期大家共同成长,共同进步。

相关教程
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号