python基础(序列化(json/shelve/pickle)、random、os、sys、hashlib等)
一、 序列化:
1.1 json方法:
1.1.1 总结:
json.load() | 参数文件句柄(r) | 将文件中字符串转换成字典 |
json.dump() | 对象(字典) | 文件句柄(w) 将字典转换字符串写入到文件中 |
json.dumps() | 对象(字典) | 将字典转换成字符串 |
json.loads() | 字符串(字典) | 将字符串转换成字典 |
1.1.2 json的操作方法:
import json # 注意,json转换完的字符串类型的字典中的字符串是由""表示的 d = {'user': 'abc', 'pwd': 123} # 将字典转换成字符串(序列化) s = json.dumps(d) print(s) # 注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示 s = '{"user": "abc", "pwd": 123}' # 将字符串转换成字典(反序列化) d = json.loads(s) print(d) # dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 d = {'user': 'abc', 'pwd': 123} # 将字典转换成字符串,存入文件中 json.dump(d, open('register.txt', encoding='utf-8', mode='w')) # load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 d = json.load(open('register.txt', encoding='utf-8', mode='r')) # 将文件读出转换成字典 print(d) # json格式化输出: data = {'username': ['李华', '二愣子'], 'sex': 'male', 'age': 16} json_dic2 = json.dumps(data, sort_keys=True, indent=2, separators=(',', ':'), ensure_ascii=False) # ensure_ascii=False中文显示 print(json_dic2)
1.2 pickle 方法:
1.2.1 总结:
pickle.load() | 参数文件句柄(rb) | 将文件中字节码转换成字典 |
pickle.dump() | 对象(字典) | 文件句柄(wb) 将字典转换字节码写入到文件中 |
pickle.dumps() | 对象(字典) | 将字典转换成字节码 |
pickle.loads() | 字节(字节码) | 将字节码转换成字典 |
1.2.2 pickle 的操作方法:
# pickle操作方法: import pickle # 缺点:只适用python特有的类型 d = {'user': 'abc', 'pwd': 123} # 将字典转换成字节 s = pickle.dumps(d) print(s) s = b'\x80\x03}q\x00(X\x04\x00\x00\x00userq\x01X\x03\x00\x00\x00abcq\x02X\x03\x00\x00\x00pwdq\x03K{u.' d = pickle.loads(s) # 将字节转化成字典 print(d) d = {'user': 'abc', 'pwd': 123} # 将字典转换成字节,存入文件中 pickle.dump(d, open('register.txt', mode='wb')) # 注意:wb方式写入,不需要指定编码方式 d = pickle.load(open('register.txt', mode='rb')) # 将文件中的字节读出转换成字典 wb方式读出 print(d)
1.2.3 pickle的类方法:
# 序列化方法: import pickle # 创建新的类 class Course: def __init__(self, name, price, period): self.name = name self.price = price self.period = period # 实例化: python = Course('python',20000,'6 months') linux = Course('linux', 15800, '5 months') # 文件写入: with open('pickle_file', 'ab') as f: pickle.dump(python, f) pickle.dump(linux, f) # 文件读取: with open('pickle_file', 'rb') as f: # 获取单一对象 # obj1 = pickle.load(f) # obj2 = pickle.load(f) while True: try: obj = pickle.load(f) print(obj.__dict__) except EOFError: break
1.3 shelve 方法:
1.3.1 存储特点:
类似于字典(文件 + 字典操作)
# shelve使用方法: # 1.文件 + 字典操作 import shelve # writeback = True 回写,直到成功写入文件 f = shelve.open('c', writeback=True) # 创建文件 f['name'] = 'alex' # 以字典形式写入文件 f['age'] = 18 # print(f['nann']) # 查询写入文件内容,存在则返回值,否则报错 print(f.keys()) # KeysView(<shelve.DbfilenameShelf object at 0x000002404576C240>) print(f.values()) print(f.items()) print(list(f.keys())) # 获取key值 ['name', 'age'] print(list(f.values())) print(list(f.items()))
二、 random 模块:
2.1 操作方法:
import random print(random.random()) # 获取0到1之间的随机的小数 print(random.randint(1, 5)) # 获取1-5之间的随机数 顾头顾腚 print(random.randrange(1, 5)) # 生成随机数,顾头不顾腚 print(random.randrange(1, 15, 2)) # 生成1-15之间的奇数位随机数,可以设置步长 print(random.randrange(0, 15, 2)) # 生成0-15之间的偶数数位随机数 lst = ['张开', '宝元', '佩奇', '太白'] print(random.choice(lst)) # 随机选择一个元素 lst = ['张开', '宝元', '佩奇', '太白'] print(random.choices(lst, k=2)) # 可以指定随机生成个数,但可能会存在两个随机元素相同情况(元素重复) lst = ['张开', '宝元', '佩奇', '太白'] print(random.sample(lst, k=2)) # 可以指定随机生成个数,生成随机元素不会重复 lst = [1, 2, 3, 4, 5, 6] random.shuffle(lst) # 打乱列表元素 print(lst) # 小实例: U = chr(random.randrange(65, 91)) # A-Z L = chr(random.randrange(97, 123)) # a-z n1 = random.randrange(0, 10) # 0-9 n2 = random.randrange(0, 10) # 0-9 print(U, L, n1, n2) # 生成验证码
三、 OS模块:
3.1 特点:
os模块是与操作系统交互的一个接口
3.2 操作方法:
<em>#和文件夹相关 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 # 和文件相关 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 # 和操作系统差异相关 os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n" os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' # 和执行系统命令相关 os.system("bash command") 运行shell命令,直接显示 os.popen("bash command).read() 运行shell命令,获取执行结果 os.environ 获取系统环境变量 #path系列,和路径相关 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第二个元素。 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小<br></em> os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') # 注意:os.stat('path/filename') 获取文件/目录信息 的结构说明 stat 结构: st_mode: inode 保护模式 st_ino: inode 节点号。 st_dev: inode 驻留的设备。 st_nlink: inode 的链接数。 st_uid: 所有者的用户ID。 st_gid: 所有者的组ID。 st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。 st_atime: 上次访问的时间。 st_mtime: 最后一次修改的时间。 st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
四、 sys 模块:
4.1 操作方法:
# sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称
五、 加密方法:
5.1 加密算法应用场景:
做密码
判断一致性
加密后不可逆 不能解
5.1 MD5方法:
# MD5加密: import hashlib md5 = hashlib.md5() # 普通方式 加密方式 md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密 print(md5.hexdigest()) # 生成密文 md5 = hashlib.md5('盐'.encode('utf-8')) # 选择加密方式 加盐(salt) md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密 print(md5.hexdigest()) # 生成密文 # 小实例: user, pwd = input('user|pwd:').strip().split('|') import hashlib md5 = hashlib.md5(str(user).encode('utf-8')) # salt用法 md5.update(pwd.encode('utf-8')) print(md5.hexdigest())
5.2 sha1类型方法:
# sha加密: # sha加密(sha1,sha256,sha512): import hashlib sha1 = hashlib.sha1() # sha512加密 sha1.update('alex3714'.encode('utf-8')) print(sha1.hexdigest()) sha256 = hashlib.sha256() # sha512加密 sha256.update('alex3714'.encode('utf-8')) print(sha256.hexdigest()) sha512 = hashlib.sha512() # sha512加密 sha512.update('alex3714'.encode('utf-8')) print(sha512.hexdigest())
https://www.cnblogs.com/WiseAdministrator/