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. 套接字编程简介: IPV4套接字地址结构/ 通用套接字地址结构/ IPV6套接字地址结构/新通用套接字地址结构

    IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中. struct in_addr { in_addr_t ...

  2. return、reutrn false、e.preventDefault、e.stopPropagation、e.stopImmediatePropagation的区别

    return var i = function(){ return } console.log(i())//undefined return的主要作用是阻止函数继续执行,直接返回undefined r ...

  3. MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!

    转:https://mp.weixin.qq.com/s/CEJFsDBizdl0SvugGX7UmQ 不知道从什么时候开始,网上流传着这么一个说法: MySQL的WHERE子句中包含 IS NULL ...

  4. 出现 java.lang.OutOfMemoryError: PermGen space 错误的原因及解决方法

    一.原因及解决方法[1] 1.原因:堆内存的永久保存去区内存分配不足(缺省默认为64M),导致内存溢出错误. 2.解决方法:重新分配内存大小,-Xms1024M -Xmx2048M -XX:PermS ...

  5. Windows 文件过滤驱动经验总结

    Windows 文件过滤驱动经验总结作者:sinister 本文转载自驱动开发网 看了 ChuKuangRen 的第二版<文件过滤驱动开发教程>后,颇有感触.我想,交流都是建立在平等的基础 ...

  6. 冰多多团队Beta阶段发布说明

    Bingduoduo 语音Coding(Beta):项目Github地址 Beta版本新功能介绍 在beta阶段我们很好地将alpha阶段已经设计好的编辑器和shell整合了起来,推出了一个完整的ID ...

  7. 自顶向下深入分析Netty(七)--ChannelPipeline和ChannelHandler总述

    自顶向下深入分析Netty(七)--ChannelPipeline和ChannelHandler总述 自顶向下深入分析Netty(七)--ChannelPipeline源码实现 自顶向下深入分析Net ...

  8. oracle通过dblink连接mysql配置详解(全Windows下)

    关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也没花多长时间,就是刚开始走了一段弯路,所以把这次的经验分享出来,让大家少走 ...

  9. What is the difference between UNION and UNION ALL?

    What is the difference between UNION and UNION ALL? UNION removes duplicate records (where all colum ...

  10. Spring的注解收集

    @Scope("prototype")spring 默认scope 是单例模式scope="prototype" 可以保证 当有请求的时候 都创建一个Actio ...