python基礎day-15:time、hash、json

weixin_41615044發表於2020-12-26

 

 

時間模組

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

一、time

import time

1.1 time.time()

  • 獲取當前時間

  • 返回的是時間戳

    	時間戳
    	當前時間到1970年1月1日0時0分0秒的時間差
    	格林威治時間
    	單位秒
    
    t1 = time.time()
    print(t1)            # 1608947214.3345132
    print(type(t1))      # <class 'float'>
    print(bin(int(t1)))  # 0b1011111111001101001011000001110
    
  • 使用時間戳儲存時間大概4個位元組

  • 比使用字串儲存時間所用的記憶體要少很多

  • 通過時間戳加密時間更簡單

1.2 time.localtime()

  • 本地時間

  • 型別為struct_time結構體時間

    t2 = time.localtime()
    print(t2)  # time.struct_time(tm_year=2020, tm_mon=12, tm_mday=26, tm_hour=9, tm_min=48, tm_sec=54, tm_wday=5, tm_yday=361, tm_isdst=0)
    print(type(t2))  # <class 'time.struct_time'>
    print(f'{t2.tm_year}-{t2.tm_mon}-{t2.tm_mday}')  # 2020-12-26
    
  • 將時間戳轉換成localtime

    t3 = time.localtime(t1)
    print(t3)
    
    # 練習:
    # 將結構體時間轉換成字串時間
    def struct_str_time(struct_t):
        return f'{struct_t.tm_year}年{struct_t.tm_mon}月{struct_t.tm_mday}日 ' \
               f'{struct_t.tm_hour}:{struct_t.tm_min}:{struct_t.tm_sec}'
    
    
    # 將時間戳轉換為字串時間
    def flt_str_time(flt_t):
        struct_t = time.localtime(flt_t)
        return struct_str_time(struct_t)
    
    
    print(flt_str_time(t1))
    

1.3 time.strftime(struct_time)

  • 將結構體時間轉換成字串時間

    print(time.strftime('%Y-%m-%d', t2))  # 2020-12-26
    print(time.strftime('%m-%d-%y', t2))  # 12-26-20
    
        %Y  Year with century as a decimal number.
        %m  Month as a decimal number [01,12].
        %d  Day of the month as a decimal number [01,31].
        %H  Hour (24-hour clock) as a decimal number [00,23].
        %M  Minute as a decimal number [00,59].
        %S  Second as a decimal number [00,61].
        %z  Time zone offset from UTC.
        %a  Locale's abbreviated weekday name.
        %A  Locale's full weekday name.
        %b  Locale's abbreviated month name.
        %B  Locale's full month name.
        %c  Locale's appropriate date and time representation.
        %I  Hour (12-hour clock) as a decimal number [01,12].
        %p  Locale's equivalent of either AM or PM.
    
    # 星期幾 上午時:分
    print(t3)
    print(time.strftime('%w %p %I:%M', t3))
    

1.4 sleep(sec)

程式暫定指定時間,單位秒

二、datetime

import datetime

2.1 datetime.time()

print(datetime.time(13, 4, 3, 8))  # 13:04:03.000008

2.2 datetime.date

t1 = datetime.date.today()
print(t1)                 # 2020-12-26
print(t1.year, t1.month)  # 2020 12

2.3 datetime.datetime

t2 = datetime.datetime.now()
t3 = datetime.datetime(20, 12, 31)
print(t2)        # 2020-12-26 11:07:25.721354
print(t3)        # 0020-12-31 00:00:00

2.4 datetime.timedelta

# 時間加減
t4 = t3 + datetime.timedelta(days=365000)
print(t4)  # 1020-05-03 00:00:00

 
 

 

hash摘要

hashlib是python自帶的一個專門提供hash加密的模組

import hashlib

一、hash加密的特點

  • 同一個資料通過同一個演算法加密得到的結果是一樣的
  • 加密後的結果叫密文或摘要
  • 加密後的結果不可逆
  • 不同大小的資料通過相同演算法生成的摘要長度是一樣的

二、應用場景

  • 建立資料不可逆的密文
  • 驗證資料的完整性和是否被修改

三、怎麼生成摘要

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

    hash = hashlib.md5()
    

    常見的hash演算法:

    MD5
    sha

  2. 確定加密物件

    hash物件.update(資料)

    資料 - 必須是bytes型別

    hash.update(bytes('1234', encoding='utf-8'))
    
    字串和二進位制之間的相互轉換
    字串轉二進位制:
        1. bytes(str, encoding='utf-8')
        2. str.encode()
        
    二進位制轉字串:
        1. str(bytes, encoding='utf-8')
        2. bytes.decode()
    
  3. 生成摘要(生成密文)

    result = hash.hexdigest()
    print(result)
    

 
 

 

json資料

一、什麼是json

  • json是一種資料格式
  • 輕量級,不加密
    	1. 一個json有且只有一個資料
    	2. 這個資料必須是json支援的資料型別的資料
    

二、json支援的資料型別

    1. 數字:所有的數字,整數、浮點數、正數、負數...,
            表示的時候直接寫;
            支援科學計數法
    2. 字串:雙引號引起來的文字資料
            支援轉義字元
    3. 布林:true、false兩個值
            表示時直接寫
    4. 陣列:相當於列表
            json支援的型別作為元素
    5. 字典:相當於字典
            鍵只能是字串,雙引號
            值是json支援型別
    6. 空值:null

三、json資料轉python

在python中

import json

json.loads(json資料的字串)

  • json資料指json格式的字串(字串去掉引號後本就是一個合法的json資料)

    json.loads('True')  # json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
    
    print(type(json.loads('true')))  # <class 'bool'>
    print(type(json.loads('1234')))  # <class 'int'>
    print(type(json.loads('"ab"')))  # <class 'str'>
    
    	json    python
    	--------------
    	數字   -  整型、浮點型
    	字串  -  字串
    	布林   -  布林
    	陣列   -  列表
    	字典   - 字典
    	null  - None
    	--------------
    
    # 練習:獲取所有國家的名字和對應的死亡人數,並且按照死亡人數從大到小排序
    # 		[('中國', 2345), ('韓國', 345),...]
    
    file_path = '\pandemic_info.txt'
    with open(rf'{file_path}',  encoding='utf-8') as f:
        content = f.read()
    
    pdmc_info = json.loads(content)
    nations_death = [(nation_info['provinceName'], nation_info['deadCount'])
                     for nation_info in pdmc_info['newslist']]
    
    nations_death = sorted(nations_death, key=lambda n_d: n_d[1], reverse=True)
    print(nations_death)
    '''
    [('美國', 330244), ('巴西', 190515), ('印度', 147092), ('墨西哥', 121172), ('義大利', 71359), ('英國', 70195), ('法國', 62427), ('伊朗', 54440), ('俄羅斯', 53659), ('西班牙', 49824), ('阿根廷', 42314), ('哥倫比亞', 41690), ('祕魯', 37368), ('德國', 29968), ('波蘭', 26992), ('南非', 26276), ('印度尼西亞', 20847), ('土耳其', 19371), ('比利時', 19038), ('烏克蘭', 17581), ('智利', 16358), ('羅馬尼亞', 15023), ('加拿大', 14719), ('厄瓜多', 13984), ('伊拉克', 12755), ('荷蘭', 10924), ('捷克', 10859), ('巴基斯坦', 9753), ('玻利維亞', 9076), ('菲律賓', 9062), ('匈牙利', 8833), ('瑞典', 8279), ('孟加拉國', 7398), ('埃及', 7309), ('摩洛哥', 7170), ('保加利亞', 7073), ('瑞士', 6561), ('葡萄牙', 6478), ('沙烏地阿拉伯', 6168), ('奧地利', 5783), ('中國', 4777), ('瓜地馬拉', 4757), ('希臘', 4507), ('突尼西亞', 4385), ('塞爾維亞', 4221), ('波黑', 3901), ('巴拿馬', 3756), ('約旦', 3711), ('克羅埃西亞', 3548), ('以色列', 3186), ('日本', 3105), ('宏都拉斯', 3060), ('摩爾多瓦', 2871), ('亞美尼亞', 2733), ('阿爾及利亞', 2716), ('哈薩克', 2669), ('緬甸', 2552), ('斯洛維尼亞', 2520), ('亞塞拜然', 2416), ('多明尼加', 2404), ('北馬其頓', 2401), ('喬治亞', 2313), ('愛爾蘭', 2194), ('巴拉圭', 2154), ('阿富汗', 2135), ('哥斯大黎加', 2086), ('衣索比亞', 1897), ('尼泊爾', 1816), ('斯洛伐克', 1732), ('肯亞', 1653), ('黎巴嫩', 1540), ('阿曼', 1491), ('蘇丹', 1468), ('波多黎各', 1423), ('利比亞', 1415), ('白俄羅斯', 1367), ('吉爾吉斯斯坦', 1340), ('薩爾瓦多', 1283), ('奈及利亞', 1246), ('立陶宛', 1205), ('丹麥', 1134), ('阿爾巴尼亞', 1134), ('委內瑞拉', 1006), ('科威特', 926), ('澳大利亞', 908), ('韓國', 793), ('阿聯酋', 653), ('黑山', 652), ('敘利亞', 652), ('烏茲別克', 612), ('葉門共和國', 607), ('剛果(金)', 573), ('巴勒斯坦', 561), ('芬蘭', 524), ('拉脫維亞', 502), ('盧森堡', 461), ('馬來西亞', 449), ('喀麥隆', 448), ('挪威', 421), ('庫拉索島', 408), ('安哥拉', 395), ('塞內加爾', 381), ('尚比亞共和國', 381), ('巴林', 351), ('辛巴威', 339), ('迦納', 333), ('茅利塔尼亞', 301), ('牙買加', 292), ('馬達加斯加', 260), ('烏干達', 245), ('卡達', 244), ('馬裡', 235), ('海地', 235), ('貝里斯', 226), ('馬耳他', 203), ('愛沙尼亞', 202), ('奈米比亞', 187), ('馬拉維', 187), ('斯里蘭卡', 186), ('巴哈馬', 169), ('尼加拉瓜', 164), ('蓋亞那', 162), ('莫三比克', 156), ('瓜德羅普島', 155), ('史瓦濟蘭', 154), ('烏拉圭', 143), ('古巴', 139), ('象牙海岸', 133), ('索馬利亞', 127), ('千里達及托巴哥', 125), ('甘比亞', 123), ('關島', 121), ('蘇利南', 119), ('剛果(布)', 114), ('維德角', 112), ('法屬波利尼西亞', 108), ('塞普勒斯', 107), ('查德', 102), ('尼日', 90), ('塔吉克', 89), ('赤道幾內亞', 85), ('賴比瑞亞', 83), ('安道爾', 83), ('幾內亞', 80), ('布吉納法索', 77), ('獅子山', 76), ('法屬蓋亞那', 71), ('多哥', 68), ('盧安達', 66), ('吉布提', 65), ('加彭', 64), ('中非共和國', 63), ('南蘇丹', 62), ('泰國', 60), ('聖馬利諾', 56), ('馬約特', 54), ('賴索托', 51), ('阿魯巴', 49), ('馬爾地夫', 48), ('幾內亞比索', 45), ('貝南', 44), ('留尼旺', 42), ('馬提尼克', 42), ('澤西島', 41), ('波札那', 38), ('越南', 35), ('列支敦斯登', 30), ('新加坡', 29), ('冰島', 28), ('荷屬聖馬丁', 26), ('紐西蘭', 25), ('馬恩島', 25), ('美屬維爾京群島', 23), ('塞席爾', 21), ('坦尚尼亞', 21), ('聖多美和普林西比', 17), ('鑽石公主號郵輪', 13), ('根西島', 13), ('聖馬丁島', 12), ('模里西斯', 10), ('百慕大', 9), ('巴布亞紐幾內亞', 9), ('葛摩', 7), ('巴貝多', 7), ('直布羅陀', 6), ('特克斯和凱科斯群島', 6), ('聖露西亞', 5), ('安地卡及巴布達', 5), ('摩納哥', 3), ('荷蘭加勒比地區', 3), ('汶萊', 3), ('蒲隆地共和國', 2), ('北馬裡亞納群島聯邦', 2), ('開曼群島', 2), ('斐濟', 2), ('厄利垂亞', 1), ('英屬維爾京群島', 1), ('蒙特塞拉特', 1), ('蒙古', 0), ('聖巴泰勒米島', 0), ('聖文森及格瑞那丁', 0), ('不丹', 0), ('格林那達', 0), ('法羅群島', 0), ('梵蒂岡', 0), ('福克蘭群島', 0), ('東帝汶', 0), ('柬埔寨', 0), ('多米尼克', 0), ('新喀里多尼亞', 0), ('安圭拉', 0), ('格陵蘭', 0), ('聖其茨和尼維斯', 0), ('寮國', 0), ('聖皮埃爾和密克隆群島', 0)]
    '''
    

四、python資料轉json

json.dumps(python資料)

  • 將python資料轉換成json格式的字串
  • .loads()反過來
    	python  json
    	------------
    	int   -  數字
    	float  -  數字
    	布林    -  布林
    	字串  -  字串,雙引號
    	列表   -  陣列
    	元組   -  陣列
    	字典   -  字典
    	None   -  null
    	------------
    	* 容器中的元素不是json支援的型別,則不能轉換
    

相關文章