time模塊python
在Python中,一般有這幾種方式來表示時間:算法
1 import time 2 3 # 1 time() :返回當前時間的時間戳 4 time.time() #1473835903.0278263 5 6 #---------------------------------------------------------- 7 8 # 2 localtime([secs]) 9 # 將一個時間戳轉換爲當前時區的struct_time。secs參數未提供,則以當前時間爲準。 10 time.localtime() # time.struct_time(tm_year=2016, tm_mon=9, tm_mday=14, tm_hour=14, tm_min=53, tm_sec=18, tm_wday=2, tm_yday=258, tm_isdst=0) 11 time.localtime(1473835903.0278263) 12 13 #---------------------------------------------------------- 14 15 # 3 gmtime([secs]) 和localtime()方法相似,gmtime()方法是將一個時間戳轉換爲UTC時區(0時區)的struct_time。 16 17 #---------------------------------------------------------- 18 19 # 4 mktime(t) : 將一個struct_time轉化爲時間戳。 20 print(time.mktime(time.localtime()))#1473836098.0 21 22 #---------------------------------------------------------- 23 24 # 5 asctime([t]) : 把一個表示時間的元組或者struct_time表示爲這種形式:'Sun Jun 20 23:21:05 1993'。 25 # 若是沒有參數,將會將time.localtime()做爲參數傳入。 26 print(time.asctime())#Wed Sep 14 14:55:39 2016 27 28 #---------------------------------------------------------- 29 30 # 6 ctime([secs]) : 把一個時間戳(按秒計算的浮點數)轉化爲time.asctime()的形式。若是參數未給或者爲 31 # None的時候,將會默認time.time()爲參數。它的做用至關於time.asctime(time.localtime(secs))。 32 print(time.ctime()) #Wed Sep 14 14:55:39 2016 33 34 print(time.ctime(time.time())) # Wed Sep 14 14:55:39 2016 35 36 # 7 strftime(format[, t]) : 把一個表明時間的元組或者struct_time(如由time.localtime()和 37 # time.gmtime()返回)轉化爲格式化的時間字符串。若是t未指定,將傳入time.localtime()。若是元組中任何一個 38 # 元素越界,ValueError的錯誤將會被拋出。 39 print(time.strftime("%Y-%m-%d %X", time.localtime())) # 2016-09-14 14:58:12 40 41 # 8 time.strptime(string[, format]) 42 # 把一個格式化時間字符串轉化爲struct_time。實際上它和strftime()是逆操做。 43 print(time.strptime('2016-09-14 14:58:12', '%Y-%m-%d %X')) 44 45 # time.struct_time(tm_year=2016, tm_mon=9, tm_mday=14, tm_hour=14, tm_min=58, tm_sec=12, tm_wday=2, tm_yday=258, tm_isdst=-1) 46 47 #在這個函數中,format默認爲:"%a %b %d %H:%M:%S %Y"。 48 49 50 # 9 sleep(secs) 51 # 線程推遲指定的時間運行,單位爲秒。 52 53 # 10 clock() 54 # 這個須要注意,在不一樣的系統上含義不一樣。在UNIX系統上,它返回的是「進程時間」,它是用秒錶示的浮點數(時間戳)。 55 # 而在WINDOWS中,第一次調用,返回的是進程運行的實際時間。而第二次以後的調用是自第一次調用之後到如今的運行 56 # 時間,即兩次時間差。
幫助信息shell
help(time)
help(time.asctime)
datetime模塊數據庫
import datetime # print(datetime.datetime.now()) #返回 2016-09-14 15:09:09.555727 # print(datetime.date.fromtimestamp(time.time()) ) # 時間戳直接轉成日期格式 2016-09-14 # 時間加減 # 對日期和時間進行加減實際上就是把datetime日後或往前計算,獲得新的datetime。 # now = datetime.datetime.now() # now + datetime.timedelta(3)) #當前時間+3天 # now + datetime.timedelta(-3)) #當前時間-3天 # now+ datetime.timedelta(hours=3)) #當前時間+3小時 # now + datetime.timedelta(minutes=30)) #當前時間+30分 # c_time = datetime.datetime.now() # print(c_time.replace(minute=3,hour=2)) #時間替換
random 模塊bash
1 import random 2 3 print(random.random()) # (0,1)隨機浮點數 4 print(random.randint(1, 3)) # 隨機1-3整數,便是一、二、3 5 print(random.randrange(1, 3)) # 隨機1-3整數,不包括3 6 print(random.choice([1, "23", [4, 5]])) # n個元素中選一個 7 print(random.sample(['123', 4, [1, 6], 9], 3)) # 從n個元素中選擇指定個數,這裏是3 8 print(random.uniform(1, 5)) # 生成隨機浮點數 9 10 11 # 生成隨機驗證碼 12 def v_code(): 13 code='' 14 for i in range(5): 15 add = random.choice([random.randrange(10),chr(random.randrange(65,91))]) 16 code += str(add) 17 18 print(code) 19 v_code()
os 模塊app
os是與操做系統交互的一個接口運維
1 os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑 2 os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd 3 os.curdir 返回當前目錄: ('.') 4 os.pardir 獲取當前目錄的父目錄字符串名:('..') 5 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname 6 os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname 7 os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄 8 os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打 9 os.remove() 刪除一個文件 10 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推 11 os.rename("oldname","newname") 重命名文件/目錄 # abc.txt與abc是兩個文件 12 os.stat('path/filename') 獲取文件/目錄信息 13 os.sep 輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/" 14 os.linesep 輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n" 15 os.pathsep 輸出用於分割文件路徑的字符串 16 os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix' 17 os.system("bash command") 運行shell命令,直接顯示 18 os.environ 獲取系統環境變量 19 os.path.abspath(path) 返回path規範化的絕對路徑 20 os.path.split(path) 將path分割成目錄和文件名二元組返回 21 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 22 os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略
sys模塊dom
提供對解釋器相關的操做ide
1 sys.argv 命令行參數List,第一個元素是程序自己路徑 2 sys.exit(n) 退出程序,正常退出時exit(0) 3 sys.version 獲取Python解釋程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 6 sys.platform 返回操做系統平臺名稱 7 sys.stdout.write('please:') 8 val = sys.stdin.readline()[:-1]
9 sys.path.append() 改變模塊的搜索目錄
hashlib 模塊函數
Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。
什麼是摘要算法呢?摘要算法又稱哈希算法、散列算法。它經過一個函數,把任意長度的數據轉換爲一個長度固定的數據串(一般用16進制的字符串表示)。
摘要算法就是經過摘要函數f()
對任意長度的數據data
計算出固定長度的摘要digest
,目的是爲了發現原始數據是否被人篡改過。
摘要算法之因此能指出數據是否被篡改過,就是由於摘要函數是一個單向函數,計算f(data)
很容易,但經過digest
反推data
卻很是困難。並且,對原始數據作一個bit的修改,都會致使計算出的摘要徹底不一樣。
咱們以常見的摘要算法MD5爲例,計算出一個字符串的MD5值:
1 import hashlib 2 3 md5 = hashlib.md5() 4 md5.update('how to use md5 in python hashlib?'.encode('utf-8')) 5 print(md5.hexdigest())
計算結果以下:
d26a53750bc40b38b65a520292f69306
若是數據量很大,能夠分塊屢次調用update()
,最後計算的結果是同樣的:
import hashlib md5 = hashlib.md5() md5.update('how to use md5 in '.encode('utf-8')) md5.update('python hashlib?'.encode('utf-8')) print(md5.hexdigest())
另外一種常見的摘要算法是SHA1,調用SHA1和調用MD5徹底相似:
1 import hashlib 2 3 sha1 = hashlib.sha1() 4 sha1.update('how to use sha1 in '.encode('utf-8')) 5 sha1.update('python hashlib?'.encode('utf-8')) 6 print(sha1.hexdigest())
摘要算法能應用到什麼地方?舉個經常使用例子:
任何容許用戶登陸的網站都會存儲用戶登陸的用戶名和口令。如何存儲用戶名和口令呢?方法是存到數據庫表中
若是以明文保存用戶口令,若是數據庫泄露,全部用戶的口令就落入黑客的手裏。此外,網站運維人員是能夠訪問數據庫的,也就是能獲取到全部用戶的口令。
正確的保存口令的方式是不存儲用戶的明文口令,而是存儲用戶口令的摘要