那些年被我坑過的Python——道阻且長(第五章實用模塊講解)

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                                )
logging模塊使用簡述

 

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所指向的文件或者目錄的最後修改時間
sys和os

 

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)
相關文章
相關標籤/搜索