昨日回顾

序列化模块:

  • json -- load dump dumps loads
  • pickle -- load dump dumps loads
  • shelve -- 文件 + 字典 f = shelve.open('a')

持久化,json跨编码语言交互

随机数

  • random.random() # 0-1之间小数
  • random.randint() # 起始位置,终止位置
  • random.randrange() # 奇数,偶数
  • random.choice(iter)
  • random.choices(iter)
  • import random
  • random.sample 没有重复 指定一个k=?? 选择的数量
  • random.shuffle 洗牌

os

  • os.path.join # 路径拼接
  • os.path.abspath # 返回一个绝对路劲
  • os.path.dirname # 返回是目录的路径
  • os.path.basename # 返回文件名字
  • os.path.getsize # 获取文件大小 有坑
  • os.listdir
  • os.makedirs
  • os.rmovedirs
  • os.mkdir
  • os.rmdir
  • os.remove
  • os.rename

sys

  • sys.argv cmd交互模式下动态获取参数
  • sys.path python解释器模块查找路径
  • sys.version python解释器获取版本号
  • sys.platform 操作系统平台信息
  • sys.exit() 正常退出 0 异常 1

hashlib

  • md5,sha1,sha256,sha512
  • 对密码加密,判断一致性(不可逆,不可解)
  • 特别容易被撞库, (动态加盐)加盐

执行顺序

  1. 导入模块
  2. 选择加密方式
  3. 将要加密的内容转成字节然后加密
  4. 生成密文
import hashlib
md5 = hashlib.md5()   # 加盐

实例化一个对象

md5.update(b'wusir')
print(md5.hexdigest())
2950931a0b85c648ccf14137b4b1d66f
a5e646f24aa7314d8ba3dce048358e90
sha1,sha256,sha512
##密文越长,越安全-越慢

time

time 内置的

import time    不需要咱们自己安装的
import time
print(time.time()) # 浮点型(小数)  给计算机看 计算

三种:

  • 时间戳time.time()
  • 结构化时间 修改
  • 字符串时间 给人看的print(time.localtime())
  • 命名元组 :
time.struct_time(tm_year=2019, tm_mon=3, tm_mday=20, tm_hour=10,tm_min=21, tm_sec=36, tm_wday=2, tm_yday=79, tm_isdst=0)
print(time.strftime('%Y-%m-%d %X'))
print(time.strftime('%Y-%m-%d %H:%M:%S'))

字符串时间

  1. 先转换成结构化时间
  2. 结构化转成字符串
print(time.localtime(time.time()))
f = time.localtime(time.time() - 86000 * 3)  # 150000000 秒  86000`
print(time.strftime('%Y-%m-%d %H:%M:%S',f))
print(time.strftime('%Y-%m-%d %X',f))
'2018-11-30 12:30'
print(type(time.strftime('%Y-%m-%d %X')))
f = time.strptime('2018-11-30 12:30','%Y-%m-%d %H:%M')

支持索引 和.点的方法

new_time = time.mktime(f) + 2*3600
new_t = time.localtime(new_time)
print(time.strftime('%Y-%m-%d %H:%M:%S',new_t))
#时间戳 -- 结构化时间
#结构化时间 -- 字符串时间
#字符串时间 -- 结构化时间
#结构化时间 -- 时间戳
f = time.localtime()
print(time.strftime('%X %Y-%m-%d',f))
= '2019-03-20 10:40:00'
#这个时间向后退一个月

1.转成结构化

f = time.strptime(t,'%Y-%m-%d %X')

2.结构化时间转成时间戳

ts = time.mktime(f)

3.将时间戳向大变

new_ts = ts + 86400 * 30

4.将最新的时间戳转成结构化时间

new_f = time.localtime(new_ts)

5.将结构化时间转成字符串时间

print(time.strftime('%Y-%m-%d %X',new_f))
#获取当前时间求前一月的现在时间
1.获取时间戳进行减法计算
new_ts = time.time() - 30*86400

6.最新的时间戳转成结构化时间

new_f = time.localtime(new_ts)

7.将结构化时间转成字符串时间

print(time.strftime('%Y-%m-%d %X',new_f))
time.strftime()

总结:

6个
  时间戳 -- 结构化   1    ****
  结构化 -- 时间戳   1    ****
  结构化 -- 字符串   1    ****
  字符串 -- 结构化   1    ****
  # time.time()     1 # 获取当前时间戳
  # strftime()      1 # 获取当前字符串时间
strftime('格式','结构化时间')  # 格式可以少写
strptime('字符串时间','格式')  # 格式一一对应

datetime

import datetime.datetime
print(datetime.now())  #2019-03-20 11:35:25.(471359)毫秒
时间对象
f = datetime.timestamp(datetime.now())  # 将时间对象转换成时间戳
print(datetime.fromtimestamp(f))        # 将时间戳转成时间对象
print(datetime.strptime('2018-11-30','%Y-%m-%d'))

将字符串转成时间对象

f = datetime.now()
print(datetime.strftime(f,'%Y-%m-%d'))
将时间对象转成字符串
from datetime import datetime,timedelta  # 从xx导入 建议
int(datetime.now() - timedelta())
这个是datetime的精华

collections

coding:utf-8
#数据类型补充
port time
om collections import Counter
计算
c = Counter('adfasdfasdfasdfasdfasdf')
print(c)
print(dict(c))  #
om collections import namedtuple

命名元组

tu = namedtuple('juge',['name','age','sex','hobby'])
#类
t = tu('腚哥',19,'待定','抽烟,喝酒,烫头')
#实例一个对象
#明确的标明每个元素是什么意思
print(t[0])
#对象找属性
class A:
    @property
    def func(self):
        print(11)
a = A()
a.func
om collections import deque

双端队列

d = deque([1,2,3,4])
d.append(5)      #右边添加
print(d)
d.appendleft(10) # 左边添加
print(d)
d.insert(2,99)
print(d)
d.remove(3)
print(d)
print(d.pop())
print(d)
print(d.popleft())
print(d)
#列  栈
FIFO 先进先出
     后进先出  先进后去
om collections import defaultdict

默认字典

li = [
    {'name':'alex','hobby':'抽烟'},
    {'name':'alex','hobby':'喝酒'},
    {'name':'alex','hobby':'烫头'},
    {'name':'alex','hobby':'撩妹'},
    {'name':'wusir','hobby':'小宝剑'},
    {'name':'wusir','hobby':'游泳'},
    {'name':'wusir','hobby':'打牌'},
    {'name':'太白','hobby':'烫头'},
    {'name':'太白','hobby':'洗脚'},
    {'name':'太白','hobby':'开车'},
]
for i in li:
    d[i['name']].append(i['hobby'])
print([dict(d)])
li = [('红色',1),('黄色',1),('绿色',1),('蓝色',1),('红色',5),('绿色',1),('绿色',1),('绿色',1)]
d = defaultdict(list)
for i in li:
    d[i[0]].append(i[1])
dd = dict(d)
for em in dd:
    dd[em] = sum(dd[em])
print(dd)
dic = {"1":2,'2':2,'3':5,'alex':1,'wusir':2,'eva_j':3,'renjia':4}
while 1:
    time.sleep(0.5)
    print(dic)
print dic

总结

模块:

time:

  1. 时间戳 -- 结构化
  2. 结构化 -- 时间戳
  3. 结构化 -- 字符串
  4. 字符串 -- 结构化

datetime,timedelta

  1. 时间对象 -- 时间戳
  2. 时间戳 -- 时间对象
  3. 字符串 -- 时间对象
  4. 时间对象 -- 字符串
  5. 时间对象 - timedelta(days=1)

collections:

deque: 双端队列

  1. 两头都可添加也可以删除
  2. 队列 先进先出
  3. 栈 先进后出

Counter: 计数

  1. 计数 统计元素出现次数,以字典形式显示
  2. Counter({1:2}) 这种咱们可以直接dict()转换

defaultdict: 默认字典

  1. 利用他的特性:来实现一些非常简单的操作

namedtuple: 命名元组

  1. 作用:将元组中的元素进行标明(让别人知道这元素是什么意思)

2019-03-20-day015-序列化存储的更多相关文章

  1. 2019.03.20 mvt,Django分页

    MVT模式   MVT各部分的功能:   M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理.       V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返 ...

  2. [2019.03.20]Linux Shell 执行传参数和expr

    前不久入职实习生,现在在帮着组里面dalao们跑Case,时不时要上去收一下有木有Dump,每次敲命令太烦人于是逼着自己学写Shell脚本.一开始真的是很痛苦啊,也没能搞到书,只能凭网上半真半假的消息 ...

  3. 2019.03.20 读书笔记 as is 以及重写隐式/显示

    强转.as is 的用法 强制转换类型有两种:子类转基类,重写隐式(implicit )\显示(explicit) 转换操作符 class myclass { private int value; p ...

  4. 2019.03.20 读书笔记 关于Reflect与Emit的datatable转list的效率对比

    Reflect public static List<T> ToListByReflect<T>(this DataTable dt) where T : new() { Li ...

  5. [2019.03.25]Linux中的查找

    TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...

  6. python redis存入字典序列化存储

    在python中通过redis hset存储字典时,必须主动把字典通过json.dumps()序列化为字符串后再存储, 不然hget获取后将无法通过json.loads()反序列化为字典 序列化存储 ...

  7. 2019.03.03 - Linux搭建go语言交叉环境

    编译GO 1.6版本以上的需要依赖GO 1.4版本的二进制,并且需要把GOROOT_BOOTSTRAP的路径设置为1.4版本GO的根目录,这样它的bin目录就可以直接使用到1.4版本的GO 搭建go语 ...

  8. Redis序列化存储Java集合List等自定义类型

    在"Redis学习总结和相关资料"http://blog.csdn.net/fansunion/article/details/49278209 这篇文章中,对Redis做了总体的 ...

  9. go-redis 基于beego正确使用序列化存储数据和反序列化获取数据

    安装go-redis // 安装命令 go get github.com/gomodule/redigo/redis // 导入使用 import( "github.com/gomodule ...

  10. 2019.03.23 Cookie

    Cookie  曲奇饼干  哈哈哈.通俗的将,应该是发票. 因为http是无状态操作 当你访问服务器之后,应该会给你响应发票Cookie记录你访问了什么东西 便于下次再来查找吧,Cookie有时间的限 ...

随机推荐

  1. lua 函数基础

    函数定义在前,调用在后 如果函数只有一个实参,并且此参数是一个字面字符串或者table构造式,那么可以省略() 例如 print "hello" unpack{1,2} print ...

  2. 时间序列 ARIMA 模型 (三)

    先看下图: 这是1986年到2006年的原油月度价格.可见在2001年之后,原油价格有一个显著的攀爬,这时再去假定均值是一个定值(常数)就不太合理了,也就是说,第二讲的平稳模型在这种情况下就太适用了. ...

  3. Oracle11g版本中未归档隐藏参数

    In this post, I will give a list of all undocumented parameters in Oracle 11g. Here is a query to se ...

  4. 使用JQuery 合并两个 json 对象

    一,保存object1和2合并后产生新对象,若2中有与1相同的key,默认2将会覆盖1的值 var object = $.extend({}, object1, object2); 二,将2的值合并到 ...

  5. Spring事务的开启方式

    1.通过注解方式@Transactional @Transactional(rollbackForClassName = { "Exception", "RuntimeE ...

  6. js如何将选中图片文件转换成Base64字符串?

    如何将input type="file"选中的文件转换成Base64的字符串呢? 1.首先了解一下为什么要把图片文件转换成Base64的字符串 在常规的web开发过程中,大部分上传 ...

  7. sql server中截取字符串的常用函数

    我们如果要在sql server中,使用截取字符串的方法要怎样使用呢? sql server提供了3个常用截取字符串方法,LEFT().RIGHT().SUBSTRING() /****** Sql ...

  8. linux 添加php gd扩展 (linux添加PHP扩展)

    首先最基本的 第一:先安装库 yum -y install libjpeglibjpeg-devel libpng libpng-devel freetype freetype-devel 第二:进入 ...

  9. Vue + Element UI 实现权限管理系统(工具模块封装)

    封装 axios 模块 封装背景 使用axios发起一个请求是比较简单的事情,但是axios没有进行封装复用,项目越来越大,会引起越来越多的代码冗余,让代码变得越来越难维护.所以我们在这里先对 axi ...

  10. Android : android 8.0 audio 接口分析

    1.HIDL 的概念 HIDL 读作 hide-l,全称是 Hardware Interface Definition Language.它在 Android Project Treble 中被起草, ...