標籤:none 格式化 man its 日期格式 lis ext 出現 列表
Python之路(第十三篇)【day21】time模組、random模組、string模組、驗證碼練習一、time模組三種時間表示
在Python中,通常有這幾種方式來表示時間:
時間戳記(timestamp) : 通常來說,時間戳記表示的是從1970年1月1日00:00:00開始按秒計算的位移量。(從1970年到現在這一刻一共有多少秒)我們運行“type(time.time())”,返回的是float類型。如 time.time()=1525688497.608947
格式化的時間字串(字串時間) 如“2018-05-06”
元組(struct_time) (結構化時間) : struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天,夏令時)
?
1、time.time():
返回目前時間的時間戳記
import time ti = time.time() print(ti)
輸出結果
1525688497.608947
2、time.localtime( [secs] )
將一個時間戳記轉換為當前時區的struct_time,即時間數組格式的時間 。secs參數未提供,則以目前時間為準。
例子
import time #沒有參數 print(time.localtime()) #有參數 print(time.localtime(1480000000))
輸出結果
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=7, tm_hour=18, tm_min=46, tm_sec=25, tm_wday=0, tm_yday=127, tm_isdst=0) time.struct_time(tm_year=2016, tm_mon=11, tm_mday=24, tm_hour=23, tm_min=6, tm_sec=40, tm_wday=3, tm_yday=329, tm_isdst=0)
例子2
import time ? t=time.localtime() print(t.tm_year) #取結構化時間中單獨的數值 print(t.tm_mon) print(t.tm_mday)
輸出結果
2018 5 6
結構化時間各元素表示含義
tm_year #年 1970-2018 ? tm_mon #月 1-12 ? tm_mday #日 1-31 ? tm_hour #時 0-23 ? tm_min #分 0-59 ? tm_sec #秒 0-59 ? tm_wday #一周中得第幾天 0-6 ,星期一是0,周日是6 ? tm_yday #一年中得第幾天 0-365 ? tm_isdst #是否是夏令時 0-1 ?
3、gmtime([secs])
和localtime()方法類似,gmtime()方法是將一個時間戳記轉換為UTC時區(0時區)的struct_time。
即返回當前的格林尼治時間的元組數值
4、 mktime(t)
將一個struct_time轉化為時間戳記。
例子
import time print(time.mktime(time.localtime()))
輸出結果
1525693661.0
5、asctime([t])
把一個表示時間的元組或者struct_time表示為這種形式:‘Sun Jun 20 23:21:05 1993‘。
例子
import time print(time.asctime(time.localtime()))
輸出結果
Mon May 7 19:49:21 2018
6、 ctime([secs])
把一個時間戳記(按秒計算的浮點數)轉化為time.asctime()的形式。如果參數未給或者為
None的時候,將會預設time.time()為參數。
它的作用相當於time.asctime(time.localtime(secs))。
import time print(time.ctime())
輸出結果
Mon May 7 20:17:12 2018
7、 strftime(format[, t])
把一個代表時間的元組或者struct_time(如由time.localtime()和time.gmtime()返回)轉化為格式化的時間字串。如果t未指定,將傳入time.localtime()。如果元組中任何一個元素越界,ValueError的錯誤將會被拋出。
python中時間日期格式化符號:
%y 兩位元的年份表示(00-99) ? %Y 四位元的年份表示(000-9999) ? %m 月份(01-12) ? %d 月內中的一天(0-31) ? %H 24小時制小時數(0-23) #注意是大寫 ? %I 12小時制小時數(01-12) ? %M 分鐘數(00=59) #注意是大寫 ? %S 秒(00-59) #注意是大寫 ? %a 本地簡化星期名稱 ? %A 本地完整星期名稱 ? %b 本地簡化的月份名稱 ? %B 本地完整的月份名稱 ? %c 本地相應的日期表示和時間表示 ? %j 年內的一天(001-366) ? %p 本地A.M.或P.M.的等價符 ? %U 一年中的星期數(00-53)星期天為星期的開始 ? %w 星期(0-6),星期天為星期的開始 ? %W 一年中的星期數(00-53)星期一為星期的開始 ? %x 本地相應的日期表示 ? %X 本地相應的時間表示 ? %Z 當前時區的名稱 ? %% %號本身
?
例子
import time ? print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
輸出結果
2018-05-07 20:33:32
8、strptime(string[, format])
把一個格式化時間(字串時間)字串轉化為struct_time。實際上它和strftime()是逆操作。
import time ? print(time.strptime("2018/05/07 20:33:32","%Y/%m/%d %H:%M:%S")) #第一個參數這裡的字串分隔的字元#可以自己定義,第二個參數與第一個參數對應即可
輸出結果
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=7, tm_hour=20, tm_min=33, tm_sec=32, tm_wday=0, tm_yday=127, tm_isdst=-1)
這裡也可以單獨取值
import time ? t=time.strptime("2018/05/07 20:33:32","%Y/%m/%d %H:%M:%S") print(t.tm_mday) print(t.tm_year)
輸出結果
7 2018
9、sleep(secs)
線程延遲指定的時間運行,單位為秒。
import time ? s1 = "你好" s2 = "nicholas" print(s1) time.sleep(2) print(s2)
輸出結果
你好 #程式延遲2秒後輸出“nicholas” nicholas
10、clock() (瞭解)
Python time clock() 函數以浮點數計算的秒數返回當前的CPU時間。用來衡量不同程式的耗時,比time.time()更有用。
這個需要注意,在不同的系統上含義不同。在UNIX系統上,它返回的是"進程時間",它是用秒錶示的浮點數(時間戳記)。而在WINDOWS中,第一次調用,返回的是進程啟動並執行實際時間。而第二次之後的調用是自第一次調用以後到現在的已耗用時間。(實際上是以WIN32上QueryPerformanceCounter()為基礎,它比毫秒錶示更為精確)
time不同形式相互轉換
二、random模組
產生隨機數值的模組
1、random.random()
隨機產生大於0且小於1之間的小數
import random v1 = random.random() print(v1)
2、random.uniform(a, b)
返回一個介於a和b之間的浮點數。一般是a<b,即返回a和b之間的浮點數,如果 a大於b,則是b到a之間的浮點數。這裡的a和b都有可能出現在結果中。
import random v1 = random.uniform(1.1,2.5) #這裡的a,b不一定的整數,一般會寫成整數 print(v1)
3、random.randint(a,b)
返回range[a,b]之間的一個整數,即整數
import random v1 = random.randint(1,3) #這裡a,b必須是整數,a,b都可以出現在結果中 print(v1)
4、random.randrange(start, stop[, step])
random.randrange(start, stop[, step]) # 返回range[start,stop)之間的一個整數,start\stop必須是整數,可加step,跟range(0,10,2)類似。
import random v1 = random.randrange(1,5,2) print(v1)
5、random.choice(seq)
從非空序列seq(字串也是序列)中隨機選取一個元素。如果seq為空白則彈出 IndexError異常。
import random v1 = random.choice([1,5,2,"ni",{"k1":"v1"},["hi",8]]) print(v1)
輸出結果
從列表[1,5,2,"ni",{"k1":"v1"},["hi",8]]隨機返回一個元素
import random ? print(random.choice("nicholas"))
輸出結果
隨機返回字串“nicholas”的一個字元
6、random.sample( population, k)
從population樣本或集合中隨機選取k個不重複的元素組成新的序列
import random v1 = random.sample([1,5,2,"ni",{"k1":"v1"},["hi",8]],3) print(v1)
輸出結果
從列表中隨機抽出3個不重複的元素組成新的列表
7、random.shuffle()
將列表的順序打亂
import random li = [1,5,2,3] random.shuffle(li) print(li)
輸出結果:輸出這4個元素隨機順序的列表
三、string模組(瞭解)
字串方法見之前的博文。
下面是一些字串常量
1、string.ascii_lowercase
返回字串小寫字母’abcdefghijklmnopqrstuvwxyz’
import stringprint(string.ascii_lowercase)
2、string.ascii_uppercase
返回字串大寫的字母’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
import stringprint(string.ascii_uppercase)
3、string.ascii_letters
返回小寫a~z加上大寫的A~Z組成的字串,即string.ascii_lowercase串連string.ascii_uppercase組成的字串
import stringprint(string.ascii_letters)
4、string.digits
數字0到9的字串:’0123456789’
import stringprint(string.digits)
5、string.hexdigits
返回字串’0123456789abcdefABCDEF’,即十六進位的所有字元(英文字母加上大小寫)組成的字串
import stringprint(string.hexdigits)
6、string.letters
string.letters在python2中返回的結果與string.ascii_letters一樣,python3中取消了,
string.ascii_letters在python2、python3中都可以用
7、string.lowercase
string.lowercase在python2中返回字串小寫字母’abcdefghijklmnopqrstuvwxyz’,與string.ascii_lowercase一致,python3中取消了
string.ascii_lowercase在python2、python3中都可以用
8、string.uppercase
string.lowercase在python2中返回字串大寫的字母’ABCDEFGHIJKLMNOPQRSTUVWXYZ’,與string.ascii_uppercase一致,python3中取消了
string.ascii_uppercase在python2、python3中都可以用
9、string.octdigits
返回八進位的所有字元組成的字串
import stringprint(string.octdigits)
10、string.punctuation
返回所有標點字元
import stringprint(string.punctuation)
輸出結果
!"#$%&‘()*+,-./:;<=>[email protected][\]^_`{|}~
11、string.printable
返回所有的可列印的字元的字串。包含數字、字母、標點符號和空格
import stringprint(string.printable)
輸出結果
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&‘()*+,-./:;<=>[email protected][\]^_`{|}~
分析:即string.digits加上string.ascii_letters加上string.punctuation組成的字串
四、驗證碼練習
產生四位元字驗證碼
1、方法一
import random li=[str(i) for i in random.sample(range(0,10),4)] print("".join(li))
2、方法二
import random li = [] for i in range(4): li.append(str(random.randint(0,9))) print("".join(li))
產生數字加字母的四位驗證碼
1、方法一
import random num_l = list(map(str,list(range(10)))) #擷取以0-9字串為元素的列表 del_l = list(range(91,97)) chr_l = [chr(i) if i not in del_l else ‘‘for i in range(65,123)] #擷取大小寫a-z的列表,去掉中間的6個特殊字元 num_l.extend(chr_l) #將字母和數字組合在一起 res_l = num_l res_str = "".join(res_l).strip("") #去掉Null 字元元素 print("".join(random.sample(res_str,4)))
2、方法二
import stringimport randomres_str = ("%s%s")%(string.ascii_letters,string.digits)print("".join(random.sample(res_str,4)))
Python之路(第十三篇)time模組、random模組、string模組、驗證碼練習