day15-時間和hash和json
時間模組
-
python和時間相關的模組有兩個:time、datetime
-
時間戳
時間戳指的是當前時間到1970年1月1日0時0分0秒(指的是格林威治時間)的時間差(單位時秒)
優點:
1)使用時間戳儲存時間比使用字串儲存時間所佔用的記憶體要少很多;
2)通過時間戳對時間進行加密更簡單
-
time() - 獲取當前時間,返回的是時間戳
-
localtime() - 獲取當前本地時間,返回的是結構體時間
localtime(時間戳) - 將時間轉換成本地的結構體時間
-
-
將結構體時間轉換成字串時間
strftime(時間格式字串,結構體時間)
""" %Y - 年 %m - 月 %d - 日 %H - 時(24小時制) %I - 時(12小時制) %M - 分 %S - 秒 %a - 星期(簡寫) %A - 星期(全拼) %w - 星期(數字值) %b - 月份(簡寫) %B - 月份(全拼) %p - 上午或者下午(AM/PM) """
datetime
from datetime import time, date, datetime, timedelta
# time - 時分秒
# date - 年月日
# datetime - 年月日時分秒
t1 = date.today()
print(t1, t1.year, t1.month, t1.day) # 2020-12-26 2020 12 26
t2 = datetime.now()
print(t2) # 2020-12-26 17:50:13.300294
t3 = datetime(2020, 12, 31, 23, 59, 10)
print(t3) # 2020-12-31 23:59:10
print(t3 + timedelta(seconds=40)) # 2020-12-31 23:59:50
print(t3 + timedelta(days=1)) # 2021-01-01 23:59:10
hash摘要
hashlib是python自帶的一個專門提供hash加密的模組
-
hash加密的特點:
- 同一個資料通過同一個加密演算法得到的結果是一樣的(加密後的結果叫密文或者叫摘要)
- 加密後的結果不可逆
- 不同大小的資料通過相同的演算法生成的摘要的長度是一樣的
-
應用場景
- 建立資料不可逆的密位(加密)
- 驗證資料的完整性和是否被修改
-
怎麼生成摘要
-
根據加密演算法建立hash物件
hash = hashlib.md5() # 常見hash演算法: md5、sha相關
-
確定加密物件
hash物件.update(資料)
資料 - 必須是bytes物件
hash.update(bytes('123456', encoding='utf-8'))
-
生成摘要(生成密文)
hash物件.hexdigest()
result = hash.hexdigest() print(result) # e10adc3949ba59abbe56e057f20f883e
-
生成圖片摘要
hash = hashlib.md5() with open('圖片路徑', 'rb') as f: hash.update(f.read()) print(hash.hexdigest())
-
生成文字檔案摘要
hash = hashlib.md5() with open('01-回顧.py', 'rb') as f: hash.update(f.read()) print(hash.hexdigest()) # 584e96244fb3de4e51233ee5306f37d0
-
-
(補充)字串和二進位制之間的相互轉換
-
字串轉二進位制 - 編碼
a.bytes(字串, encoding=‘utf-8’)
str1 = 'hello world!' b1 = bytes(str1, encoding='utf-8') print(type(b1)) # <class 'bytes'>
b.字串.encode()
b2 = str1.encode() print(type(b2)) # <class 'bytes'>
-
二進位制轉字串 - 解碼
a.str(二進位制, encoding=‘utf-8’)
b.二進位制.decode()
s1 = str(b1, encoding='utf-8') print(s1, type(s1)) # hello world! <class 'str'> s2 = b1.decode() print(s2, type(s2)) # hello world! <class 'str'>
-
其他模組
cmath是專門為複數提供數學功能的模組
import math, cmath, os
print(math.ceil(1.2)) # 2 - 向上取整
print(math.floor(1.2)) # 1 - 向下取整
json資料
-
什麼是json
json是一種資料格式: 一個json有且只有一個資料;這個唯一的資料必須是json支援的資料型別的資料
-
json支援的資料型別
- 數字型別:包括所有的數字,包含整數、浮點數、正數、負數…表示的時候直接寫,支援科學計數法
- 字串:用雙引號引起來的文字資料(只能使用雙引號),支援轉義字元。 - “abc”, ‘abc\n123’, “\u4e00abc”
- 布林:只有ture和false兩個值,表示的時候直接寫
- 陣列:相當於列表,[元素1, 元素2, 元素3, …]
- 字典:相當於python的字典,{鍵1:值1, 鍵2:值2, 鍵3:值3, …}, 注意:鍵只能是字串
- 空值:null
-
json資料轉python
數字 – 整型、浮點型
字串 – 字串
布林 – 布林:true -> True; false -> False
陣列 – 列表
字典 – 字典
null – None
json.loads(json資料) - json資料指的是jison格式的字串(字串去掉引號之後,本身就是一個合法的json資料)
‘abc’ - 不是json格式字串
’ “abc” ’ - 是json格式字串
‘123’ – 是json格式字串
result = json.loads('"abc"')
print(result, type(result)) # 'abc' <class 'str'>
result = json.loads('123')
print(result, type(result)) # 123 <class 'int'>
result = json.loads('true')
print(result, type(result)) # True <class 'bool'>
result = json.loads('["hello", 123, null, false]')
print(result, type(result)) # ['hello', 123, None, False] <class 'list'>
result = json.loads('{"name":"小明", "age":18}')
print(result, type(result)) # {'name': '小明', 'age': 18} <class 'dict'>
-
python資料轉json
int、float -> 數字
布林 -> 布林:True -> true, False -> false
字串 -> 字串,引號變成雙引號
列表、元組 -> 陣列
字典 -> 字典
None -> null
json.dumps(python資料) - 將python資料轉換成json格式的字串
120 -> ‘120’
‘abc’ -> ’ “abc” ’
[‘abc’, 120, True] -> ‘[“abc”, 120, true]’
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, False, None, 'hello']) print(result, type(result)) # '[120, false, null, "hello"]' <class 'str'> result = json.dumps({'name':'張三', 10:100}) print(result) # '{"name": "\u5f20\u4e09", "10": 100}'
相關文章
- mysql時間操作(時間差和時間戳和時間字串的互轉)MySql時間戳字串
- 建立時間和保持時間
- Hash Map集合和Hash Set集合
- 日期和時間
- 時間型別和時間戳型別時間戳
- 時間相減和時間轉換
- 日期和時間格式
- Python 日期和時間Python
- Java日期和時間Java
- datetime日期和時間
- redis存json資料時選擇string還是hashRedisJSON
- 返回hash 型別的json型別JSON
- Linux時間設定系統時間、硬體時間和時間服務Linux
- 坑系列 — 時間和空間的平衡
- iOS中的isEqual和hashiOS
- MyBatis自動設定建立時間和更新時間MyBatis
- 事件溯源中的時間和時間建模 - Tomasz Jaskula事件
- Python基礎教程:Day15-影象和辦公文件處理Python
- Flink基礎:時間和水印
- Qt:獲取日期和時間QT
- 【Python基礎】日期和時間Python
- Java 日期和時間 API:實用技巧與示例 - 輕鬆處理日期和時間JavaAPI
- jwt_token的有效時間和重新整理時間JWT
- python時間戳和時間字串的各種轉換Python時間戳字串
- 使用Python獲取DNS解析時間和響應時間PythonDNS
- hash和history路由的區別路由
- php 和 nginx 的幾個超時時間PHPNginx
- Linux設定和修改時間與時區Linux
- 細說PHP筆記08(第12章)--日期和時間,建立時間戳,mktime轉換unix時間戳,獲取字串時間,獲得日期和時間資訊,日期和時間格式化輸出,microtime()獲取微秒數PHP筆記時間戳字串
- Pandas中時間和日期處理
- Java 8 日期和時間的APIJavaAPI
- GO語言————4.8 時間和日期Go
- MySQL 的日期和時間函式MySql函式
- AVIX方法和時間研究軟體
- python時間模組time和datetimePython
- CST和GMT時間的區別
- 時間戳和正規表示式時間戳
- 字串和日期時間的處理字串