day17

序列化

json

两组4个方法:

1、dumps(序列化) —— loads(反序列)

dumps(list):将对象转换成字符串

loads(str):将字符串转换成对象

  • list——str——list
  • tuple——str——list(直接变成列表,两个结果都是列表[]括起来)
  • dict——str——dict
  • set不可序列化
lit = [1,22,3,3,45]
print(json.dumps(lit),type(json.dumps(lit)))
str_lst = json.dumps(lit)
lst = json.loads(str_lst)
print(lst,type(lst)) dic = {'username':'宝元'}
# str_dic = json.dumps(dic) # 序列化
str_dic = json.dumps(dic,ensure_ascii=False) # ensure_ascii=False 关闭ascii码
print(str_dic,type(str_dic))
dic1 = json.loads(str_dic) # 反序列化
print(dic1,type(dic1))
2、dump —— load

dump(list,文件名):将对象转换成字符串写入文件

load(文件名):将文件中字符串转换成对象读出文件

  • list——str——list
  • tuple——str——list(直接变成列表,两个结果都是列表[]括起来)
  • dict——str——dict
  • set不可序列化
import json
dic = (1,2,3,4,5)
with open("infoo","a",encoding="utf-8")as f:
json.dump(dic, f) with open("infoo","r",encoding="utf-8")as f1:
lst1 = json.load(f1)
print(lst1,type(lst1)) # 同时写多个内容 进行序列化
lst = [1,2,3,4,56,]
f = open("info","w",encoding="utf-8")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.close() # 同时读多个内容进行反序列
f1 = open("info","r",encoding="utf-8")
for i in f1:
l = json.loads(i)
print(l)
f1.close()

pickle

pickle——nb(python所有对象进行转换)

python自带的(只有python可以用)

两组4个方法

1、dumps —— loads

dumps:转换成类似字节的东西

loads:转回来

import pickle
lst = [12,3,4,5,768]
t_list = pickle.dumps(lst) # 转换成类似字节
print(t_list)
print(pickle.loads(t_list)) dic = {"user":"郭宝元"}
t_list = pickle.dumps(dic) # 转换成类似字节
print(t_list)
print(pickle.loads(t_list)) import pickle
def func():
print(111) fun = pickle.dumps(func)
print(fun)
pickle.loads(fun)()
2、dump —— load

dump:转换成类似字节的东西写入文件

load:转回来读出文件

import pickle
dic = {"usern":"baoyuian"}
# dic = {"usern":"宝元"}
pickle.dump(dic,open("info","wb"))
print(pickle.load(open("info","rb"))) import pickle
dic = {"1":2}
f = open("info","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("info","rb")
for i in f1:
print(pickle.loads(i))

推荐使用json

json是各种语言通用的

pickle(python私有)

os模块

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

1、工作目录
import os
# print(os.getcwd()) # 查看当前工作路径 ***
# os.chdir("D:\python 笔记\day09") # 路径切换
# print(os.curdir) # 当前(.)
# print(os.pardir) # 父级(..)
2、文件夹
import os
os.mkdir("ttt") # 创建一个文件夹 ***
os.rmdir("ttt") # 删除一个文件夹 ***
os.makedirs("ttt/sss/ddd/ee") # 递归创建文件夹 ***
os.removedirs("ttt/sss/ddd/ee") # 递归删除文件夹 ***
print(os.listdir(r"D:\python 笔记\day17")) # 把整个文件夹里面的文件以列表显示 ***
3、文件
import os
os.rename("info","infoo") # 重命名文件/目录 ***
os.remove() # 删除一个文件 ***
4、路径
import os
# print(os.path.abspath("infoo")) # 通过相对路径获取绝对路径 ***
# print(os.path.split(os.path.abspath("infoo"))) # 将路径以最后一个\切割,结果(路径,文件名)
# print(os.path.dirname(r"D:\python 笔记\day17\__init__.py")) # 获取路径,结果(D:\python 笔记\day17) ***
# print(os.path.exists(r"D:\python 笔记\day17\__init__.py")) # 判断这个路径是否存在 ***
# print(os.path.isdir(r"D:\python 笔记\day17")) # 判断是不是路径 ***
# print(os.path.isfile("__init__.py")) # 判断是不是文件 ***
# print(os.path.isabs("D:\python 笔记\day17\__init__.py")) # 判断是不是绝对路径
# print(os.path.join("D:\\\\","ttt","bbb")) # 路径拼接 ****
# import time
# print(time.time())
# print(os.path.getatime(r"F:\s24\day17\04 序列化.py")) # 最后的修改时间
# print(os.path.getctime(r"F:\s24\day17\04 序列化.py")) # 最后的访问时间
# print(os.path.getmtime(r"F:\s24\day17\04 序列化.py")) # 最后的访问时间
# print(os.path.getsize(r"F:\s24\day09")) # 获取当前文件的大小 ***

sys模块

sys——与python解释器交互的接口

import sys
# import sys
# if sys.argv[-1] == "alex":
# print("dsb")
# else:
# print("李业dsb")
# print(sys.argv) # *** 当前文件运行,结果:['D:/python 笔记/day17/sys模块.py']
# print(exit(0或1)) # 退出程序,正常退出时exit(0),错误退出sys.exit(1)
# print(sys.path) # 添加自定义模块查找路径 ******
# print(sys.platform) # 区分操作系统然后进行相关逻辑操作 ***

hashlib加密

加密和校验

md5算法(安全系数最低)、sha1、sha256、sha512

最常用的是md5,平时加密的时候使用sha1

加密:

​ 加密的内容

​ 将要加密的内容转成字节

  • 只要明文相同密文就是相同的
  • 只要明文不相同密文就是不相同的
  • 不能反逆(不能解密)——md5中国人破解了
import hashlib
md5 = hashlib.md5()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest()) md5 = hashlib.md5()
md5.update("alex123".encode("gbk"))
print(md5.hexdigest()) md5 = hashlib.sha1()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest()) md5 = hashlib.sha256()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())
加盐

固定加盐

import hashlib
md5 = hashlib.md5("常鑫".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())
校验
ss = "baoyuanalextaibai"
import hashlib
md5 = hashlib.md5()
md5.update(ss.encode("utf-8"))
print(md5.hexdigest())
# 9b674a2402eb25b1ccd2106868bd1ee9 import hashlib # 节省内存
s1 = "baoyuan"
s2 = "alex"
s3 = "taibai"
md5 = hashlib.md5()
md5.update(s1.encode("utf-8"))
md5.update(s2.encode("utf-8"))
md5.update(s3.encode("utf-8"))
print(md5.hexdigest())
# 9b674a2402eb25b1ccd2106868bd1ee9 # 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()) # 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

collections

**Counter():计数器,主要用来计数 *******************

from collections import Counter
# s = [1,1,2,2,3,3]
# s = (1,2,3,3,4,5,6,7,78)
s = "1112233344aaa"
print(dict(Counter(s))) # ***
# 结果是 {'1': 3, '2': 2, '3': 3, '4': 2, 'a': 3}
# 统计元素出现的次数

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

from collections import namedtuple,deque
Point = namedtuple('tu',["a","b","c"]) # 第一个参数是元组的名字,第二参数是元组中元素的[名字,名字]
p = Point({"keu":(1,2,3,4)}, 20,10)
print(p)
# 结果是:tu("a"="keu":(1,2,3,4)},"b"=20,"c"=10)

deque():双端队列,可以快速的从另外一侧追加和推出对象

# lst = deque([1,2,3,4,5,6,7])  # 先进先出
# lst.append(8) # 在最后追加
# lst.appendleft(0) # 在最前加
# lst.pop() # 删除最后的
# lst.popleft() #删除最前的
# print(lst[4]) # 还可以使用索引

OrderedDict():有序字典

>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> od.keys() # 按照插入的Key的顺序返回
['z', 'y', 'x']

defaultdict():带有默认值的字典

# from collections import defaultdict
# dic = defaultdict(list)
# dic["k1"].append(12)
# print(dic) # li = [11,22,33,44,55,77,88,99,90]
# result = {"key1":[],"key2":[]}
# 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
# dic = defaultdict(set)
# li = [11,22,33,44,55,77,88,99,90]
# for i in li:
# if i > 66:
# dic["k1"].add(i)
# else:
# dic["k2"].add(i)
# print(dic)

day17——序列化、os、sys、hashlib、collections的更多相关文章

  1. 序列化,os,sys,hashlib,collections

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

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

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

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

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

  4. 模块之 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 ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. There is insufficient memory for the Java Runtime Environment to continue.

    There is insufficient memory for the Java Runtime Environment to continue.

  2. 洛谷P2293 高精开根

    锣鼓2293 写完了放代码 应该没什么思维难度 ———————————————————————————————————————————————————————— python真香 m=input() ...

  3. UDS的使用

    我们通过对导热微分方程式的求解,并与Fluent自己的求解结果进行对比,介绍一下Fluent当中UDS(自定义标量)的具体使用方法. 首先Fluent当中的UDS主要针对下面这样形式的方程: 其中: ...

  4. Net core学习系列(八)——Net Core日志

    一.简介# 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Conso ...

  5. Python导入 from lxml import etree 导入不了

    问题在学爬虫,Python 版本是2.7,安装的lxml包是4.3的,在 from lxml import etree 时发现一直报错,网上查询,原来是Python版本和lxml包版本不一致导致的. ...

  6. apache Request-URI Too Large 处理办法

    在Apache的httpd.conf配置文件中(直接加就可以) LimitRequestLine 40940 LimitRequestFieldSize 40940

  7. android Studio keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件

    //android Studio  keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件 遇到这个问题好久了,一直没解决今天搜集了大量的资料,有的说什么Java没配置好,不是扯犊子吗 ...

  8. Network Lock Manager Protocol (NLM)

    资料来源 https://wiki.wireshark.org/Network_Lock_Manager 目的 The purpose of the NLM protocol is to provid ...

  9. k8s记录-Dockerfile详解

    Dockerfile命令详解 下面我们来分别介绍下上面使用到的命令: FROM 格式:FROM 或FROM :. 解释:FROM必须是Dockerfile里的第一条指令(注视除外),后面跟有效的镜像名 ...

  10. 自定义MyBatis

    自定义MyBatis是为了深入了解MyBatis的原理 主要的调用是这样的: //1.读取配置文件 InputStream in = Resources.getResourceAsStream(&qu ...