序列化,os,sys,hashlib,collections

1.序列化

什么是序列化?序列化的本质就是将一种数据结构(如字典,列表)等转换成一个特殊的序列(字符串或者bytes)的过程就叫做序列化.

json
1.不同语言都遵循的一种数据转化格式,即不同语言都使用的特殊字符串。(比如Python的一个列表[1, 2, 3]利用json转化成特殊的字符串,然后在编码成bytes发送给php的开发者,php的开发者就可以解码成特殊的字符串,然后在反解成原数组(列表): [1, 2, 3])
2.json序列化只支持部分Python数据结构:dict,list, tuple,str,int, float,True,False,None import json
两组四个方法: 1.dumps loads dumps:将对象转换(序列化)成字符串
loads:将字符串转换(反序列化)成对象 lst = [1,2,3,4,5]
str_lst = json.dumps(lst) #序列化
print(str_lst)
l_lst = json.loads(str_lst) #反序列化
print(l_lst) dic = {'k1':1,'k2':2}
str_dic = json.dumps(dic) #序列化
print(str_dic)
d_dic = json.loads(str_dic) #反序列化
print(d_dic) 2.dump load dump:将对象转换(序列化)成字符串,写入文件
load:将文件中字符串转换(反序列化)成对象 lst = [1,2,3,4,5]
f = open("test","a",encoding = "utf-8")
json.dump(lst,f)
f.close() f1 = open("test","r",encoding = "utf-8")
s = json.load(f1)
print(s,s[-1])
f1.close() #同时写多个内容,进行序列化
lst = [1,2,3,4,5]
f = open("test","w",encoding = "utf-8")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.close() #同时读多个内容进行反序列化
f1 = open("test","r",encoding = "utf-8")
for i in f1:
s = json.loads(i)
print(s)
f1.close() pickle
1.只能是Python语言遵循的一种数据转化格式,只能在python语言中使用。
2.支持Python所有的数据类型包括实例化对象。 import pickle
两组4个方法: 1.dumps loads lst = [1,2,3,4,5]
t_lst = pickle.dumps(lst) #转换成类似字节
print(t_lst)
print(pickle.loads(t_lst)[-1]) # 5 dic = {"k1":1,"k2":2}
t_dic = pickle.dumps(dic) #转换成类似字节
print(t_dic)
print(pickle.loads(t_dic)) #dic = {"k1":1,"k2":2} def func():
print(111)
fun = pickle.dumps(func)
pickle.loads(fun)() # 111 2.dump load dic = {"k1":1,"k2":2}
pickle.dump(dic,open("test","wb")) #在文件中写成类似字节
print(pickle,load(open("test","rb"))) #打印原内容 #同时写多个内容
dic = {"k1":1,"k2":2}
f = open("test","wb")
s = "\n".encode("utf-8")
f.write(pickle.dumps(dic) + s)
f.write(pickle.dumps(dic) + s)
f.write(pickle.dumps(dic) + s)
f.close() #同时读多个内容
f1 = open("test","rb")
for i in f1:
print(pickle.loads(i))

2.os

os模块:程序员通过python向操作系统发送指令(与操作系统交互的接口)

os模块四组:

import os
1.工作目录
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir('F:\s24') 改变当前脚本工作目录,切换路径
os.curdir 返回当前目录
os.pardir 获取当前目录的父目录字符串名 2.文件夹
os.mkdir('test') 生成单级目录,即创建一个名为'test'的文件夹
os.rmdir('test') 删除单级空目录,即删除'test'文件夹,目录不为空则无法删除,报错
os.makedirs('test/ttt/sss') 递归创建文件夹
os.removedirs('test/ttt/sss') 递归删除文件夹
os.listdir(r'D:\S24') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 3.文件
os.remove() 删除一个文件,无法找回
os.rename("oldname","newname") 重命名文件/目录
os.stat("C:\学习\代码练习") 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 4.路径
os.path.abspath(r"test.py") 通过相对路径获取绝对路径
os.path.split(os.path.abspath(r"test.py")) 将文件路径以最后一个\切割,分割成目录和文件名二元组返回
os.path.dirname(r"C:\学习\代码练习\test.py") 获取目录(路径)
os.path.basename(r"C:\学习\代码练习\test.py") 获取文件名
os.path.exists(r"C:\学习\代码练习\test.py") 判断这个文件路径是否存在
os.path.iddir(r"C:\学习\代码练习") 判断是不是路径
os.path.isfile(r"test.py") 判断是不是文件
os.path.isabs(r"C:\学习\代码练习\test.py") 判断是不是绝对路径
os.path.join("D:\","学习","代码练习") 路径拼接
os.path.getatime(r"C:\学习\代码练习\test.py") 返回所指向的文件或者目录的最后修改时间
os.path.getmtime(r"C:\学习\代码练习\test.py") 返回所指向的文件或者目录的最后访问时间
os.path.getctime(r"C:\学习\代码练习\test.py") 返回所指向的文件或者目录的最后访问时间
os.path.getsize(r"C:\学习\代码练习\test.py") 获取当前文件的大小

3.sys

sys模块是与python解释器交互的一个接口

sys.argv           命令行参数List,第一个元素是程序本身路                      径当作脚本执行,能够携带参数
sys.exit(n) 退出程序,正常退出时exit(0),错误退出 sys.exit(1)
sys.version 获取Python解释器的版本信息
sys.path 添加自定义模块查找路径
sys.platform 区分操作系统然后进行相关逻辑操作

4.hashlib

hashlib模块也叫摘要算法或者加密算法,哈希算法,散列算法等等,一般的加密方法有MD5,sha1,sha256,sha512...
作用:加密和校验使用
工作原理:通过一个函数,把任意长度的数据按照一定规则转换为一个固定长度的数据串(通常用16进制的字符串表示) hashlib的使用:
bytes类型数据 ---> 通过hashlib算法 ---> 固定长度的字符串 特征:
1..只要明文相同密文就是相同的.
2.只要明文不相同密文就是不相同的.
3.此转化过程不可逆(不能解密). 例:
alex:alex123 import hashlib
s = hashlib.md5()
s.update("alex123".encode("utf-8"))
print(s.hexdigest()) alex:b75bd008d5fecb1f50cf026532e8ae67(#加密后) 加密:
1.加密的内容
2.将要加密的内容转成字节 最常用的就是MD5,平时加密的时候使用sha1 加盐 加固定盐:
import hashlib
md5 = hashlib.md5("hello".encode("utf-8"))
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest()) 动态加盐:
user = input("username:")
pwd = input("password:")
import hashlib
md5 = hashlib.md5(user.encode("utf-8"))
md5.update(pwd.encode("utf-8"))
print(md5.hexdigest()) 文件校验:
我们自己如何验证我们下载的资源是否有病毒呢?这就需要文件的一致性校验了。在我们下载一个软件时,往往都带有一个MD5或者shax值,当我们下载完成这个应用程序时你要是对比大小根本看不出什么问题,你应该对比他们的md5值,如果两个md5值相同,就证明这个应用程序是安全的,如果你下载的这个文件的MD5值与服务端给你提供的不同,那么就证明你这个应用程序肯定是植入病毒了(文件损坏的几率很低),那么你就应该赶紧删除,不应该安装此应用程序。 例:
我们在安装python解释器的时候,在安装python解释器的时候计算本地的md5值是否一致,一致安装,不一致的删除.获取到python3.6.6的MD5值为:767db14ed07b245e24e10785f9d28e29 f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb")
import hashlib
md5 = hashlib.md5()
md5.update(f.read())
print(md5.hexdigest())
#校验输出的MD5值是否与官方给到的MD5值相同
节省(相对)内存的校验方法:
f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb")
import hashlib
md5 = hashlib.md5()
while True:
msg = f.read(1024)
if msg:
md5.update(msg)
else:
print(md5.hexdigest())
break #二者结果相同
ss = "baoyuanalextaibai"
import hashlib
md5 = hashlib.md5()
md5.update(ss.encode("utf-8"))
print(md5.hexdigest()) s = "baoyuan"
s1 = "alex"
s2 = "taibai"
import hashlib
md5 = hashlib.md5()
md5.update(s.encode("utf-8"))
md5.update(s1.encode("utf-8"))
md5.update(s2.encode("utf-8"))
print(md5.hexdigest())

5.collections

1.namedtuple:命名元组,生成可以使用名字来访问元素内容的tuple

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p) #Point(x=1, y=2) 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
是为了高效实现插入和删除操作的双向列表,适用于队列和栈 from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')
q.appendleft('y')
print(q)
# deque(['y', 'a', 'b', 'c', 'x'])
#支持pop(),popleft(),append(),appendleft()和索引 3.Counter: 计数器,主要用来计数 from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)
#Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}) 4.OrderedDict: 有序字典
#python3.6以上版本字典是有序的 5.defaultdict: 带有默认值的字典 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 li = [11,22,33,44,55,77,88,99,90]
result = {}
for row in li:
if row > 66:
if 'key1' not in result:
result['key1'] = []
result['key1'].append(row)
else:
if 'key2' not in result:
result['key2'] = []
result['key2'].append(row)
print(result) from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in values:
if value>66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)

序列化,os,sys,hashlib,collections的更多相关文章

  1. oldboy edu python full stack s22 day16 模块 random time datetime os sys hashlib collections

    今日内容笔记和代码: https://github.com/libo-sober/LearnPython/tree/master/day13 昨日内容回顾 自定义模块 模块的两种执行方式 __name ...

  2. 内置模块:time, datetime, random, json, pickle, os, sys, hashlib, collections, re

    1.time模块 import time time.time() # 时间戳 浮点数 time.sleep() # 睡眠 time.gmtime()/time.localtime() #结构化时间 数 ...

  3. 模块之 time datetime random json pickle os sys hashlib collections

    目录 1. time模块 1.1表示时间的几种方式: 1.2格式化字符串的时间格式 1.3不同格式时间的转换 2.datetim模块 3.random模块 4. json模块 4.1dumps.loa ...

  4. python基础之 序列化,os,sys,random,hashlib

    1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...

  5. python基础 (序列化,os,sys,random,hashlib)

    1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...

  6. Python常用模块(time, datetime, random, os, sys, hashlib)

    time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) :         通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运 ...

  7. Day14 Python基础之os/sys/hashlib模块(十二)

    os模块 os.getcwd()  #获取当前工作路径 os.chdir(‘dirname1/dirname2/dirname3’) #改变当前脚本的工作路径,相当于cmd下的cd os.makedi ...

  8. time,datetime,random,os,sys,hashlib,logging,configparser,re模块

    #-----time模块----- print(help(time)) #打印time帮助文档 print(time.time()) #打印时间戳 1569824501.6265268 time.sl ...

  9. python基础语法11 内置模块time,datatime,random,os,sys,hashlib模块

    time模块 在python的三种时间表现形式: 1.时间戳: 给电脑看的. - 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒. 2.格式化时间(Format Strin ...

随机推荐

  1. 自动化测试报告浅谈之ExtentReports

    我们在进行自动化测试时,往往需要有相应的测试报告,比如junit,testng,reportng等等,有会有自带的测试报告,那为什么我要在这边提ExtentReports?首先,我们来看看其它几种测试 ...

  2. JIRA恢复备份后无法上传附件

    1.在恢复JIRA 备份数据和附件后,上传附件失败,这一般是恢复附件时没有修改附件的拥有者和组 创建JIRA平台,会自动创建一个服务器的账户,如果是服务器第一次部署JIRA那么账户肯定是jira,如果 ...

  3. msql数据库常用指令操作

    数据库指令 1.数据库指令 创建数据库:create database db_name; 删除数据库:drop database db_name; 显示数据库:show databases: 导出数据 ...

  4. 为ubuntu找个能用的桌面,顺便进行适当的改造

    最近,开始玩ros,结果官方推荐ubuntu linux,虽然都是差不多的linux,无非就是软件包形式不同而已.但是,个人对ubuntu的unity桌面实在是没有爱,最让人无语的是,kubuntu无 ...

  5. springmvc配置jackson时遇到的一些问题

    在没接触springmvc之前我们在servlet中想返回前台json数据时,都是自定义一个JSONObject和JSONArray,然后调用response.getWriter()对象的方法返回js ...

  6. SourceTree软件

      A free Git client for Windows and Mac SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具,同时也是Mer ...

  7. 数据库访问接口之ODBC

    ODBC API 实现数据库操作的手段是句柄.在ODBC中,使用不同的句柄(HANDLE)来标志环境(environment).连接(Connection).语句(statement).描述符(des ...

  8. SQL-W3School-高级:SQL LIKE 操作符

    ylbtech-SQL-W3School-高级:SQL LIKE 操作符 1.返回顶部 1. LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. LIKE 操作符 LIKE 操作符用于在 ...

  9. Cisco无线控制器配置

    一 组网图 System Name [Cisco_01::] ( characters max):wlc- //输入设备名称 Would you like to terminate autoinsta ...

  10. php开启短标签与<?xml version="1.0" encoding="UTF-8"?>冲突

    前两天写了个生成mapsite的源码,想提交到百度和谷歌,在本地测试一点问题都没有,但是在服务器上就显示500错误 最后废了九牛二虎之力,终于可以设置iis直接显示出错信息. 也搞懂了问题所在,默认服 ...