1. 程式人生 > 實用技巧 >Python常用模組之random和time

Python常用模組之random和time

常用模組:

time:

分為三種格式:

  • 1.時間戳:從1970年1月1日0點0分0秒到現在經過的秒數
    • 用於時間間隔的計算
import time 
print(time.time())
  • 2.字串顯示時間
    • 用於展示時間,更符合人類認知
print(time.strftime('%Y-%m-%d %H:%M:%S %p'))
# 2020-08-11 19:45:05 PM

print(time.strftime('%Y-%m-%d %X'))
# 2020-08-11 21:18:19

print(time.asctime())
# Wed Aug 12 21:20:31 2020
  • 3.結構化顯示時間
    • 用於單獨獲取時間某一部分
print(time.localtime())

# time.struct_time(tm_year=2020, tm_mon=8, tm_mday=11, tm_hour=21,tm_min=30, tm_sec=18, tm_wday=1, tm_yday=224, tm_isdst=0)


# 顯示格里尼治標準時間,比中國慢8個小時,中國是東8區
print(time.gmtime())

# 9個欄位:
# 年份,月份,日份,小時,分鐘,秒, 星期(從0-6,0表示週一),一年的第幾天,是否是夏令時
  • 若要顯示單獨某個欄位
# 顯示年份
print(time.localtime().tm_year)
# 2020

# 顯示當前是一年中的第幾天
print(time.localtime().tm_yday)
# 224

三種格式時間轉換

  • 時間戳轉結構化
tp_time = time.time()
pritn(time.localtime(tp_time))
# 預設是當前時區時間,也可自定義時間戳

print(time.localtime(666666666))
# time.struct_time(tm_year=1991, tm_mon=2, tm_mday=16, tm_hour=9, tm_min=11, tm_sec=6, tm_wday=5, tm_yday=47, tm_isdst=0)

# 以格里尼治標準時間為基數
print(time.gmtime(666666666))
# time.struct_time(tm_year=1991, tm_mon=2, tm_mday=16, tm_hour=1, tm_min=11, tm_sec=6, tm_wday=5, tm_yday=47, tm_isdst=0)
  • 結構化轉時間戳
st_time = time.localtime()
print(time.mktime(st_time))
  • ​ 結構化轉字串
st_time = time.localtime()
pritn(time.strftime('%Y-%m-%d %H:%M:%S',st_time))
# 2020-08-12 20:43:46
# 需要兩個引數,前面是格式,後面是結構時間引數
  • 字串轉結構化
print(time.strptime('2020-08-12 20:43:46','%Y-%m-%d %H:%M:%S')
# 兩個引數的格式必須要對應
  • time模組字串格式無法直接轉換成時間戳,需要通過結構化時間轉換

    • 時間戳轉格式化字串
    # 首先將時間戳轉換為結構化,再轉換為格式化字串
    s_time = time.localtime(666666666)
    print(time.strftime('%Y-%m-%d %H:%M:%S',s_time))
    
    # 1991-02-16 09:11:06
    
    • 格式化字串轉時間戳
    # 首先將格式化字串轉結構化,再將結構化轉時間戳
    struct_time = time.strptime('2020-8-13 13:12:20','%Y-%m-%d %H:%M:%S')
    print(time.mktime(struct_time))
    
    # 1597295540.0
    

datetime:

  • 格式化顯示時間
# 當前時區時間
print(datetime.datetime.now())
# 2020-08-12 21:21:56.192434

# 格林尼治時間
print(datetime.datetime.utcnow())
# 2020-08-12 13:21:56.209435
  • 時間運算
# 顯示三天後
print(datetime.datetime.now() + datetime.timedelta(days=3)
# 2020-08-15 10:11:23.132590
      
# 顯示三天前
print(datetime.datetime.now() + datetime.timedalta(days=-3)
print(datetime.datetime.now() - datetime.timedelta(days=3)
# 2020-08-09 10:14:34.984563
      
# 顯示三年後
print(datetime.datetime.now() + datetime.timedelta(days = 365*3))
# 2023-08-12 10:17:01.263930
  • 時間戳轉格式化字串時間
print(datetime.datetime.fromtimestamp(666666666))
# 1991-02-16 09:11:06

random:

  • 此模組提供了偽隨機數獲取相關的方法
  • random.random():獲取[0,1.0)範圍內的浮點數
import random
print(random.random())
  • random.randint(a,b):獲取[a,b]範圍內的一個整數
print(random.randint(1,3))
# 1,2,3都能取到
  • random.uniform(a,b):獲取[a,b]範圍內的浮點數
print(random.uniform(1.1,1.2))
  • random.randrange(start,stop[,step]):獲取[star,stop)之間的整數,可以指定步長
print(random.randrange(1,4))
# 獲取[1,4)之間的整數,可以獲取到1,2,3

print(random.randrange(1,4,2))
# 可以獲取到1,3
  • random.choice(seq):從非空序列seq返回一個隨機元素。如果seq為空,則報錯
li = [1,2,3,'a','b','c']
print(random.choice())
# 返回結果為列表內的一個隨機元素
  • random.sample(x,k):從x中隨機抽取k個數據,組成列表返回
li = [1,2,3,'a','b','c']
print(random.sample(li,3))
# 取列表內隨機三個元素,組成列表返回
  • random.shuffle(x):混洗。將引數指定的資料中的元素打亂。引數必須是可變的資料型別
random.shuffle(li)
print(li)

# random.shuffle()打亂的是原物件的順序 
  • 應用:隨機驗證碼
import random
def make_code(size=6):
    res = ''
    for i in range(size):
        num = str(random.randint(0,9))	    # 隨機產生一個整數
        st1 = chr(random.randint(65,90))	# 獲取65-90之間的的整數,通過chr函式轉換成大寫字母
        st2 = chr(random.randint(97,122))	# 獲取一個隨機小寫字母
        res += random.choice([num,st1,st2])	# 每次取得其中一個字元,與res累加
    return res

print(make_code())