day15-時間和hash和json

JokerYuuuuuuu發表於2021-01-01

時間模組

  1. python和時間相關的模組有兩個:time、datetime

  2. 時間戳

    時間戳指的是當前時間到1970年1月1日0時0分0秒(指的是格林威治時間)的時間差(單位時秒)

    優點:

    ​ 1)使用時間戳儲存時間比使用字串儲存時間所佔用的記憶體要少很多;

    ​ 2)通過時間戳對時間進行加密更簡單

    1. time() - 獲取當前時間,返回的是時間戳

    2. localtime() - 獲取當前本地時間,返回的是結構體時間

      localtime(時間戳) - 將時間轉換成本地的結構體時間

  3. 將結構體時間轉換成字串時間

    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加密的模組

  1. hash加密的特點:

    1. 同一個資料通過同一個加密演算法得到的結果是一樣的(加密後的結果叫密文或者叫摘要)
    2. 加密後的結果不可逆
    3. 不同大小的資料通過相同的演算法生成的摘要的長度是一樣的
  2. 應用場景

    1. 建立資料不可逆的密位(加密)
    2. 驗證資料的完整性和是否被修改
  3. 怎麼生成摘要

    1. 根據加密演算法建立hash物件

      hash = hashlib.md5()  # 常見hash演算法: md5、sha相關
      
    2. 確定加密物件

      hash物件.update(資料)

      資料 - 必須是bytes物件

      hash.update(bytes('123456', encoding='utf-8'))
      
    3. 生成摘要(生成密文)

      hash物件.hexdigest()

      result = hash.hexdigest()
      print(result)   # e10adc3949ba59abbe56e057f20f883e
      
    4. 生成圖片摘要

      hash = hashlib.md5()
      with open('圖片路徑', 'rb') as f:
          hash.update(f.read())
          print(hash.hexdigest())
      
    5. 生成文字檔案摘要

      hash = hashlib.md5()
      with open('01-回顧.py', 'rb') as f:
          hash.update(f.read())
          print(hash.hexdigest()) # 584e96244fb3de4e51233ee5306f37d0
      
  4. (補充)字串和二進位制之間的相互轉換

    1. 字串轉二進位制 - 編碼

      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'>
      
    2. 二進位制轉字串 - 解碼

      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資料

  1. 什麼是json

    json是一種資料格式: 一個json有且只有一個資料;這個唯一的資料必須是json支援的資料型別的資料

  2. json支援的資料型別

    1. 數字型別:包括所有的數字,包含整數、浮點數、正數、負數…表示的時候直接寫,支援科學計數法
    2. 字串:用雙引號引起來的文字資料(只能使用雙引號),支援轉義字元。 - “abc”, ‘abc\n123’, “\u4e00abc”
    3. 布林:只有ture和false兩個值,表示的時候直接寫
    4. 陣列:相當於列表,[元素1, 元素2, 元素3, …]
    5. 字典:相當於python的字典,{鍵1:值1, 鍵2:值2, 鍵3:值3, …}, 注意:鍵只能是字串
    6. 空值:null
  3. 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'>
  1. 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}'
    

相關文章