random模塊python
個人隨機驗證嗎程序:shell
首先保證了字母和數字出現的機率是50% VS 50%,其次是能夠訂製輸出多少位
bash
1 def Captcha(size): 2 Captcha_list = [] 3 for i in range(size): 4 rand_num = random.randint(1, 2) 5 if rand_num == 1: 6 Captcha_list.append(chr(random.randint(65, 90))) 7 elif rand_num == 2: 8 Captcha_list.append(str(random.randint(0, 9))) 9 else: 10 pass 11 return ''.join(Captcha_list)
time模塊app
時間日期經常使用的模塊有time和datetime,datetime是對time的高級封裝dom
時間的格式有三種,互相之間能夠進行相互轉化,分別是:ide
一、時間戳格式,是一串距1970-01-01至今的秒數time.time();
函數
time.time()
二、時間結構體 time.localtime()工具
time.localtime()
三、格式化後的時間字符串,格式化表達式相似於祕鑰對時間進行加密,加密後的效果爲格式化的時間,一樣也可以使用表達式進行反解
加密
# 日期字符串轉成時間戳 string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") print(string_2_struct) #將struct時間對象轉成時間戳 struct_2_stamp = time.mktime(string_2_struct) print(struct_2_stamp) # 將utc時間戳轉換成struct_time格式 print(time.gmtime(time.time()-86640)) #將utc struct_time格式轉成指定的字符串格式 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()))
shelve模塊spa
一個很方便的序列化工具,以key value的形式持久化python對象
# 徹底能夠把shelve當作一個文件字典 with shelve.open(filename, flag='c') as sdb: sdb[key] = value
具體的使用其實和字典沒什麼兩樣,增改操做就是對shelv_obj[key] = value,刪除操做使用del關鍵字便可
del shelve_obj[key]
logging模塊
一些說明:
logging.basicConfig函數各參數:
filename: 指定日誌文件名
filemode: 和file函數意義相同,指定日誌文件的打開模式,'w'或'a'
format: 指定輸出的格式和內容,format能夠輸出不少有用信息,如上例所示:
%(levelno)s: 打印日誌級別的數值
%(levelname)s: 打印日誌級別名稱
%(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0]
%(filename)s: 打印當前執行程序名
%(funcName)s: 打印日誌的當前函數
%(lineno)d: 打印日誌的當前行號
%(asctime)s: 打印日誌的時間
%(thread)d: 打印線程ID
%(threadName)s: 打印線程名稱
%(process)d: 打印進程ID
%(message)s: 打印日誌信息
datefmt: 指定時間格式,同time.strftime()
level: 設置日誌級別,默認爲logging.WARNING
stream: 指定將日誌的輸出流,能夠指定輸出到sys.stderr,sys.stdout或者文件,默認輸出到sys.stderr,當stream和filename同時指定時,stream被忽略
1 ''' 2 log_handler = logging.basicConfig(level=logging.DEBUG, 3 format='%(asctime)s [%(levelname)s]: %(message)s', 4 datefmt='%Y%m%d %H:%M:%S', 5 filename=LOG_DIR, 6 filemode='w') 7 ''' 8 # 建立日誌對象 9 logger = logging.getLogger('TEST-LOG') 10 11 # 設定日誌的底線級別 12 logger.setLevel(logging.DEBUG) 13 14 # 建立日誌的文件操做句柄 15 fh = logging.FileHandler(LOG_DIR,encoding='utf-8') 16 fh.setLevel(logging.DEBUG) 17 18 # 設定全局格式表達式 19 formatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(message)s') 20 21 # 加載格式表達式 22 fh.setFormatter(formatter) 23 24 # 啓用文件句柄記錄日誌,實現對日誌文件的操做 25 logger.addHandler(fh) 26 27 28 # 記錄相應級別的日誌,若是低於全局日誌底線級別的,則不會被記錄 29 logger_obj.info("帳號<%s> 進行了%s操做 金額變化:(%s) 金額%s利息%s 餘額爲%s" 30 % (srcaccount_data['id'], 31 type, 32 TRANSACTION_TYPE[type]["action"], 33 amount, 34 interest, 35 src_new_balance) 36 )
sys和os模塊
1 sys.argv 命令行參數List,第一個元素是程序自己路徑 2 sys.exit(n) 退出程序,正常退出時exit(0) 3 sys.version 獲取Python解釋程序的版本信息 4 sys.maxsize 最大的Int值 5 sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 6 sys.platform 返回操做系統平臺名稱 7 sys.stdout.write('please:') 8 val = sys.stdin.readline()[:-1] 9 10 os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑 11 os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd 12 os.curdir 返回當前目錄: ('.') 13 os.pardir 獲取當前目錄的父目錄字符串名:('..') 14 os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄 15 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推 16 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname 17 os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname 18 os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印 19 os.remove() 刪除一個文件 20 os.rename("oldname","newname") 重命名文件/目錄 21 os.stat('path/filename') 獲取文件/目錄信息 22 os.sep 輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/" 23 os.linesep 輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n" 24 os.pathsep 輸出用於分割文件路徑的字符串 25 os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix' 26 os.system("bash command") 運行shell命令,直接顯示 27 os.environ 獲取系統環境變量 28 os.path.abspath(path) 返回path規範化的絕對路徑 29 os.path.split(path) 將path分割成目錄和文件名二元組返回 30 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 31 os.path.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素 32 os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False 33 os.path.isabs(path) 若是path是絕對路徑,返回True 34 os.path.isfile(path) 若是path是一個存在的文件,返回True。不然返回False 35 os.path.isdir(path) 若是path是一個存在的目錄,則返回True。不然返回False 36 os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略 37 os.path.getatime(path) 返回path所指向的文件或者目錄的最後存取時間 38 os.path.getmtime(path) 返回path所指向的文件或者目錄的最後修改時間
hmac模塊
仍是比較簡單的,不過,不管是加密的key仍是加密的value都須要是bytes類型
.new()須要傳入key也就是加密的口令
.update()是傳入加密的明文
.hexdigest()是以16進制的字符顯示加密後的密碼
account = input("請輸入帳號:") password = input("請輸入密碼:") encrypt = hmac.new(bytes(account.encode(encoding='utf-8'))) encrypt.update(bytes(password.encode(encoding='utf-8'))) encrypted_password = str(encrypt.hexdigest()) print(encrypted_password)