vue视频教程 java设计模式 计算机基础知识 微信小程序教程 反射 状态模式 algorithm facebook solr webforms pygame nosql vue论坛 vue动态绑定class vue学习教程 bootstrap框架 js鼠标离开事件 python数据挖掘实战pdf linux源码在线阅读 js教程文档 java 大文件上传 python新手教程 python测试 python语言编程入门 python学习网站 python编程工具 java接口 java定义接口 java成员变量 java实例方法 java查看变量类型 java的多线程 java游戏开发 广告代码 超级兔子ie修复专家 acmecadconverter 俄罗斯方块java代码 pushstate 打马赛克的软件 免费脚本
当前位置: 首页 > 学习教程  > 编程语言

day 15 note 时间 hash和 json

2020/12/28 20:04:44 文章标签:

day 15 note 时间 hash和 json import time 01. 时间模块 1. python和时间相关的模块有两个:time、datetime 2. 时间戳 时间戳指的是当前时间到1970年1月1日0时0分0秒(指的是格林威治时间)的时间差(单位是秒) 1)使用时间戳保存时间比使用字符串保存…

day 15 note 时间 hash和 json

import time

01. 时间模块

1. python和时间相关的模块有两个:time、datetime

2. 时间戳

时间戳指的是当前时间到1970年1月1日0时0分0秒(指的是格林威治时间)的时间差(单位是秒)

1)使用时间戳保存时间比使用字符串保存时间所占用的内容要少很多;
2)通过时间戳对时间进行加密更简单

1608945703.5747042 (保存的时候大概需要4个字节) -> 包含了年、月、日、时、分、秒、毫秒
’2020-12-26 9:29:30’ (保存的时候至少需要18个字节)

1. time( ) - 获取当前时间,返回的是时间戳


t1 = time.time()
print(t1, type(t1))    # 1608945703.5747042 <class 'float'>   时间戳

2. localtime( ) — 获取当前本地时间,返回的是 结构体时间

t2 = time.localtime()
print(t2, type(t2))
print(t2.tm_year)
print(t2.tm_mon)
print(t2.tm_mday)
print(f'{t2.tm_year}-{t2.tm_mon}-{t2.tm_mday} {t2.tm_hour}:{t2.tm_min}:{t2.tm_sec}')

3. localtime(时间戳) - 将时间戳转换成本地的结构体时间



t3 = time.localtime(0)
print(t3)

t4 = time.localtime(1608945703.5747042)
print(t4)

# 练习1:自己封装一个函数,将结构体时间转换成字符串时间,字符串时间的格式是: 'xxxx年xx月xx日 xx:xx:xx'

def str_time(t: time.struct_time):
    return f'{t.tm_year}年{t.tm_mon}月{t.tm_mday}日 {t.tm_hour}:{t.tm_min}:{t.tm_sec}'

# 练习2:自己封装一个函数,将时间戳转换成字符串时间,字符串时间的格式是: 'xxxx年xx月xx日 xx:xx:xx'

def str_time2(t: float):
    t = time.localtime(t)
    return f'{t.tm_year}年{t.tm_mon}月{t.tm_mday}日 {t.tm_hour}:{t.tm_min}:{t.tm_sec}'



4. 将结构体时间转换成字符串时间

strftime(时间格式字符串,结构体时间)

时间格式字符串 - 包含时间占位符的字符串

%Y - 年
%m - 月
%d - 日
%H - 时(24小时制)
%I - 时(12小时制)
%M - 分
%S - 秒
%a - 星期(英文单词简写)
%A - 星期(英文单词全拼)
%w - 星期(数字值)
%b - 月份(英文简写)
%B - 月份(英文全拼)
%p - 上午或者下午(AM/PM)


t5 = time.localtime()

xxxx年xx月xx日

s_t5 = time.strftime('%Y年%m月%d日', t5)
print(s_t5)    # 2020年12月26日

xxxx-xx-xx

s_t5 = time.strftime('%Y-%m-%d', t5)
print(s_t5)     # 2020-12-26

xxxx/xx/xx

s_t5 = time.strftime('%Y/%m/%d', t5)
print(s_t5)     # 2020/12/26

xx点xx分

s_t5 = time.strftime('%H点%M分', t5)
print(s_t5)

s_t5 = time.strftime('%c', t5)
print(s_t5)      # Sat Dec 26 10:38:22 2020

星期几 上午时:分

s_t5 = time.strftime('%a %p%H:%M', t5)
print(s_t5)

4. sleep(时间) - 程序暂停指定时间(单位秒)

time.sleep(2)
print('===========') 

5. datetime 模块

time , date , datetime

from datetime import timedelta

import datetime

from datetime import time, date, datetime, timedelta

time - 时分秒

date - 年月日

datetime - 年月日时分秒

t1 = date.today()
print(t1, t1.year, t1.month, t1.day)

t2 = datetime.now()
print(t2)


t3 = datetime(2020, 12, 31, 23, 58, 40)
print(t3)   # 2020-12-31 23:58:40

让时间t3加20print(t3 + timedelta(seconds=20))  # 2020-12-31 23:59:00

让时间t3加2分钟

print(t3 + timedelta(minutes=2))    # 2021-01-01 00:00:40

让时间t3加2print(t3 + timedelta(days=2))    # 2021-01-02 23:58:40

让时间t3减2print(t3 - timedelta(days=2))     # 2020-12-29 23:58:40


02. hash摘要

import hashlib

hashlib是python自带的一个专门提供hash加密的模块

1. hash加密的特点

1) 同一个数据通过同一个加密算法得到的结果是一样的 (加密后的结果叫密文或者摘要)

2) 加密后的结果不可逆

3) 不同大小的数据通过相同的算法生成的摘要的长度是一样的

2. 应用场景

1) 创建数据不可逆的密文(加密)

2) 验证数据的完整性和是否被修改

3. 怎么生成摘要

1) 根据加密算法创建hash对象

hash = hashlib.md5()       # 常见hash算法: md5、sha相关

2) 添加加密对象


hash对象.update(数据)

数据 - 必须是bytes对象

hash.update(bytes('数据是东方红郡阿萨德放寒假skjdfhkjsdjfh1213123', encoding='utf-8'))

3) 生成摘要(生成密文)


hash对象.hexdigest()

result = hash.hexdigest()
print(result, type(result))     # e10adc3949ba59abbe56e057f20f883e


# 生成图片摘要

hash = hashlib.md5()
with open('宝儿姐.jpg', 'rb') as f:
    hash.update(f.read())
    print(hash.hexdigest())

# 生成文本文件的摘要

hash = hashlib.md5()
with open('01-回顾.py', 'rb') as f:
    b4 = f.read()
    hash.update(b4)
    print(hash.hexdigest())


hash = hashlib.md5()
with open('/Users/yuting/Desktop/test.docx', 'rb') as f:
    b3 = f.read()
    hash.update(b3)
    print(hash.hexdigest())
    
    

4. 补充:字符串和二进制之间的相互转换

1) 字符串转二进制


a.bytes(字符串, encoding='utf-8')

str1 = 'hello world!'
b1 = bytes(str1, encoding='utf-8')
print(type(b1))

b.字符串.encode()

b2 = str1.encode()
print(type(b2))

2) 二进制转字符串


a.str(二进制, encoding='utf-8)

b.二进制.decode()

s1 = str(b1, encoding='utf-8')
print(s1, type(s1))

s2 = str(b4, encoding='utf-8')
print(s2)

s3 = b1.decode()
print(s3)
      

03. json数据

1. 什么是json

json是一种数据格式:

**1) 一个json有且只有一个数据 **

2) 这个唯一的数据必须是json支持的数据类型的数据

2. json支持的数据类型

1)数字类型:包括所有的数字,整数、浮点数、正数、负数…, 表示的时候直接写,支持科学计数法

2)字符串:只能使用双引号,支持转义字符。 “abc”, “abc\n123”, "\u4e00abc"

3)布尔:只有 true 和 false 两个值。表示的时候直接写

4)数组:相当于Python的列表, [ 元素1, 元素2, 元素3,…]

5)字典:相当于python的字典,{ 键1:值1, 键2:值2,… }, 注意:键只能是字符串

6)空值:null

3. json 数据转 python

json.loads( json格式的字符串 ) -----> 数据

数据指的是json格式的字符串(json格式的字符串:字符串去掉引号之后本身就是一个合法是json数据)

数字 – 整型、浮点型
字符串 – 字符串
布尔 – 布尔; true -> True, false -> False
数组 – 列表
字典 – 字典
null – None



'abc' - 不是json格式字符串    '123'  -   是json格式字符串   '[10, 20, 30]'  -   是json格式字符串

'"abc"'  - 是json格式字符串   'True'  -   不是json格式字符串   '{"10": 20, "name":100}'  -   是json格式字符串

result = json.loads('"abc"')
print(result, type(result))   # 'abc' <class 'str'>

result = json.loads('123')  
print(type(result))      # <class 'int'>

result = json.loads('true')
print(result, type(result))    # True <class 'bool'>

result = json.loads('["hello", 123, false, null]')
print(result)    # ['hello', 123, False, None]

result = json.loads('{"name": "张三", "age": 18}')
print(result)    # {'name': '张三', 'age': 18}
print(result['name'])

练习:获取所有国家的名字和对应的死亡人数,并且按照死亡人数从大到小排序

[('中国', 2345), ('韩国', 345),...]

with open('test.txt', encoding='utf-8') as f:
    content = f.read()
result = json.loads(content)
newslist = result['newslist']
data = [(x['provinceName'], x['deadCount']) for x in newslist]
data.sort(key=lambda item: item[1], reverse=True)

print(data)


4. python数据转 json

json.dumps(python数据) ----> 将python数据转换成 json格式的字符串

python json
int、float --> 数字
布尔 --> 布尔;True -> true,False -> false
字符串 --> 字符串, 引号变成双引号
列表、元组 --> 数组
字典 --> 字典
None --> null



120  ->  '120'

'abc'  -> '"abc"'

['abc', 120, True]   ->  '["abc", 120, true]'

{10, 20, 30}  -> 报错!

result = json.dumps(120)
print(result, type(result))      # '120' <class 'str'>

result = json.dumps('abc')
print(result, type(result))      # '"abc"' <class 'str'>

result = json.dumps([120, 'hello', False, None])
print(result, type(result))      # '[120, "hello", false, null]'  <class 'str'>

result = json.dumps((120, 'hello', False, None))
print(result)      # '[120, "hello", false, null]'

result = json.dumps({'name': '张三', 10: 100})
print(result)    # '{"name": "\u5f20\u4e09", "10": 100}'

result = json.dumps({10, 20, 30})     # 报错!集合不能转换成json

print(result)



本文链接: http://www.dtmao.cc/news_show_550417.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?