一、hashlib模塊python
import hashlib md5 = hashlib.md5() #加鹽 md5=hashlib.md5(bytes('salt'),encoding='utf-8') md5.update(b'123456') # 必須是bytes類型 轉bytes類型 passwd = bytes(passwd,encoding='utf-8') print(md5.hexdigest()) # 123456 MD5的結果 e10adc3949ba59abbe56e057f20f883e 兩個實例: import hashlib usr= input('username: ') pwd = input('passwd: ') with open('userinfo') as f: for line in f: username,passwd,job = line.split('|') md5=hashlib.md5() md5.update(bytes(pwd, encoding='utf-8')) pwd=md5.hexdigest() if usr==username and pwd==passwd: print('登錄成功') else: print('用戶名或密碼錯誤') f.close() #文件的md5 import hashlib md5=hashlib.md5() with open('test.txt') as f: for line in f: md5.update(bytes(line,encoding='utf-8')) #md5.update 能夠對字符串或文件分屢次update print(md5.hexdigest())
二、時間模塊:shell
python有三種方式表示時間:時間戳、元組、格式化時間字符串:bash
(1)時間戳:1970年1月1日00:00:00開始按秒計算的偏移量,返回float類型,如:dom
import time print(time.time()) # 1532875990.1858788
(2)元組:ide
struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天等)函數
索引(Index) | 屬性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 好比2011 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(時) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 60 |
6 | tm_wday(weekday) | 0 - 6(0表示週一) |
7 | tm_yday(一年中的第幾天) | 1 - 366 |
8 | tm_isdst(是不是夏令時) | 默認爲0 |
import time print(time.localtime()) #輸出結果 time.struct_time(tm_year=2018, tm_mon=7, tm_mday=29, tm_hour=22, tm_min=55, tm_sec=40, tm_wday=6, tm_yday=210, tm_isdst=0)
(3)格式化時間字符串spa
%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 %X")) # 2018-07-29 23:00:54 print(time.strftime("%Y-%m-%d %H-%M-%S")) #2018-07-29 23-01-37 print(time.strftime("%Y.%m.%d")) #2018.07.29
三、random模塊操作系統
import random print(random.random()) # 0.05734134949398206 大於0且小於1之間的小數 print(random.uniform(1,5)) # 3.026923245207668 大於1小於5的小數 print(random.randint(1,200)) #隨機整數 print(random.randrange(1,200,2)) #隨機奇數 print(random.choices((1,[1,2],(1,2)))) #隨機選擇一個 print(random.sample([1,'23',[4,5]],2)) #列表元素任意2個組合
一個例子:隨機驗證碼命令行
def captcha_code(): code='' for i in range(5): num = random.randint(0,9) #大於等於0,小於等於9= alphabet = chr(random.randint(65,90)) add = random.choice([num,alphabet]) code = code+str(add) print(code) captcha_code()
四、logging 模塊線程
import logging logging.debug('debug message') #排錯信息 logging.info('info message') #正常信息 logging.warning('warning message') #告警信息 logging.error('error message') #錯誤信息 logging.critical('critical message') #高級別、嚴重信息
import logging
logger = logging.getLogger()
fh = logging.FileHandler('test.txt',encoding='utf-8')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
fh.setFormatter(formatter) #文件操做符 和 格式 關聯
sh.setFormatter(formatter) #屏幕操做符 和 格式 關聯
logger.addHandler(fh) #logger對象和文件操做符 關聯
logger.addHandler(sh) #logger對象和屏幕操做符 關聯
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('WARNING warning message')
logger.error('logger error message')
logger.critical('logger critical message')
配置參數:
logging.basicConfig()函數中可經過具體參數來更改logging模塊默認行爲,可用參數有: filename:用指定的文件名建立FiledHandler,這樣日誌會被存儲在指定的文件中。 filemode:文件打開方式,在指定了filename時使用這個參數,默認值爲「a」還可指定爲「w」。 format:指定handler使用的日誌顯示格式。 datefmt:指定日期時間格式。 level:設置rootlogger(後邊會講解具體概念)的日誌級別 stream:用指定的stream建立StreamHandler。能夠指定輸出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認爲sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。 format參數中可能用到的格式化串: %(name)s Logger的名字 %(levelno)s 數字形式的日誌級別 %(levelname)s 文本形式的日誌級別 %(pathname)s 調用日誌輸出函數的模塊的完整路徑名,可能沒有 %(filename)s 調用日誌輸出函數的模塊的文件名 %(module)s 調用日誌輸出函數的模塊名 %(funcName)s 調用日誌輸出函數的函數名 %(lineno)d 調用日誌輸出函數的語句所在的代碼行 %(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示 %(relativeCreated)d 輸出日誌信息時的,自Logger建立以 來的毫秒數 %(asctime)s 字符串形式的當前時間。默認格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒 %(thread)d 線程ID。可能沒有 %(threadName)s 線程名。可能沒有 %(process)d 進程ID。可能沒有 %(message)s用戶輸出的消息
五、sys模塊
sys模塊是與python解釋器交互的一個接口
sys.argv 在外部向程序內部傳遞參數,命令行參數List,第一個元素是程序自己路徑,如 python 1.py 1024,返回的sys.argv[0]>1.py(自己),sys.argv[1]>1024 sys.exit(n) 退出程序,正常退出時exit(0),錯誤退出sys.exit(1) sys.version 獲取Python解釋程序的版本信息 sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 sys.platform 返回操做系統平臺名稱
六、OS模塊
OS模塊是與操做系統交互的一個接口
os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑 os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd os.curdir 返回當前目錄: ('.') os.pardir 獲取當前目錄的父目錄字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印 os.remove() 刪除一個文件 os.rename("oldname","newname") 重命名文件/目錄 os.stat('path/filename') 獲取文件/目錄信息 os.sep 輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/" os.linesep 輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n" os.pathsep 輸出用於分割文件路徑的字符串 win下爲;,Linux下爲: os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix' os.system("bash command") 運行shell命令,直接顯示 os.popen("bash command).read() 運行shell命令,獲取執行結果 os.environ 獲取系統環境變量 os.path os.path.abspath(path) 返回path規範化的絕對路徑 os.path.split(path) 將path分割成目錄和文件名二元組返回 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 os.path.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。 即os.path.split(path)的第二個元素 os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False os.path.isabs(path) 若是path是絕對路徑,返回True os.path.isfile(path) 若是path是一個存在的文件,返回True。不然返回False os.path.isdir(path) 若是path是一個存在的目錄,則返回True。不然返回False os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略 os.path.getatime(path) 返回path所指向的文件或者目錄的最後訪問時間 os.path.getmtime(path) 返回path所指向的文件或者目錄的最後修改時間 os.path.getsize(path) 返回path的大小