Python模塊介紹一

模塊講解

import time

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都做網(wǎng)站、哈爾濱網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、哈爾濱網(wǎng)絡(luò)營(yíng)銷、哈爾濱企業(yè)策劃、哈爾濱品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供哈爾濱建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn

print(time.time())
print(time.strftime('%Y-%m-%d %X')) # 2018-10-25 15:06:16 Y代表year,m為mouth,d為day,x為時(shí)間
c = time.localtime(time.time()+3600243)
print(c)

time.struct_time(tm_year=2018, tm_mon=10, tm_mday=25, tm_hour=15, tm_min=7, tm_sec=20, tm_wday=3, tm_yday=298, tm_isdst=0)

struct_time元組共有9個(gè)元素共九個(gè)元素:(年,月,日,時(shí),分,秒,一年中第幾周,一年中第幾天等)

時(shí)間戳轉(zhuǎn)化為結(jié)構(gòu)化時(shí)間localtime/gmtime

gmtime為世界標(biāo)準(zhǔn)時(shí)間,一般不使用。

localtime為東八區(qū)時(shí)間,為我們所在的時(shí)間,常使用localtime

print(time.gmtime())
print(time.strptime('2018-10-20','%Y-%m-%d'))

import random
print(random.random()) #輸出大于0且小于1之間的小數(shù)
print(random.randint(1,6)) # 隨機(jī)輸出大于等于1且小于等于5之間的整數(shù),[1,5]
print(random.randrange(1,3)) # 隨機(jī)輸出大于等于1且小于3之間的整數(shù),[1,3)

print(random.choice([1, '2', [3, 4]])) # 隨機(jī)取列表中的一個(gè)元素,結(jié)果為1或者2或者[3,4]
print(random.sample([1, '2', [3, 4]], 2)) # 隨機(jī)取列表中任意2個(gè)元素
print(random.uniform(1, 3)) # 隨機(jī)取大于1小于3的小數(shù)
item = [1, 2, 3, 4, 5]
print(random.shuffle(item)) # 直接輸出,什么都沒有
random.shuffle(item)
print(item)
print(item) # 再次打印結(jié)果和上一次輸出結(jié)果一樣,需要重新打亂才能輸出重新排序的列表
random.shuffle(item)
print(item)

#生成5位的隨機(jī)碼
def get_random_number():
s=''
for i in range(5):
num = str(random.randint(0,9))
c1=chr(random.randint(97,122))
c2=chr(random.randint(65,90))
rnum=random.choice([num,c1,c2])
s+=rnum
print(s)
get_random_number()

"""
Hashlib
Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。
什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過一個(gè)函數(shù),把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串(通常用16進(jìn)制的字符串表示)。
摘要算法就是通過摘要函數(shù)f()對(duì)任意長(zhǎng)度的數(shù)據(jù)data計(jì)算出固定長(zhǎng)度的摘要digest,目的是為了發(fā)現(xiàn)原始數(shù)據(jù)是否被人篡改過。
摘要算法之所以能指出數(shù)據(jù)是否被篡改過,就是因?yàn)檎瘮?shù)是一個(gè)單向函數(shù),計(jì)算f(data)很容易,但通過digest反推data卻非常困難。
而且,對(duì)原始數(shù)據(jù)做一個(gè)bit的修改,都會(huì)導(dǎo)致計(jì)算出的摘要完全不同。
我們以常見的摘要算法MD5為例,計(jì)算出一個(gè)字符串的MD5值:
摘要算法應(yīng)用: 文件一致性校驗(yàn) 、 登錄
任何允許用戶登錄的網(wǎng)站都會(huì)存儲(chǔ)用戶登錄的用戶名和口令。如何存儲(chǔ)用戶名和口令呢?方法是存到數(shù)據(jù)庫表中:
name | password
--------+----------
michael | 123456
bob | abc999
alice | alice2008
如果以明文保存用戶口令,如果數(shù)據(jù)庫泄露,所有用戶的口令就落入***的手里。此外,網(wǎng)站運(yùn)維人員是可以訪問數(shù)據(jù)庫的,也就是能獲取到所有用戶的口令。

正確的保存口令的方式是不存儲(chǔ)用戶的明文口令,而是存儲(chǔ)用戶口令的摘要,比如MD5:
username | password
---------+---------------------------------
michael | e10adc3949ba59abbe56e057f20f883e
bob | 878ef96e86145580c38c87f0410ad153
alice | 99b1c2188db85afee403b1536010c2c9
考慮這么個(gè)情況,很多用戶喜歡用123456,888888,password這些簡(jiǎn)單的口令,于是,***可以事先計(jì)算出這些常用口令的MD5值,得到一個(gè)反推表:
'e10adc3949ba59abbe56e057f20f883e': '123456'
'21218cca77804d2ba1922c33e0151105': '888888'
'5f4dcc3b5aa765d61d8327deb882cf99': 'password'
這樣,無需破解,只需要對(duì)比數(shù)據(jù)庫的MD5,***就獲得了使用常用口令的用戶賬號(hào)。
對(duì)于用戶來講,當(dāng)然不要使用過于簡(jiǎn)單的口令。但是,我們能否在程序設(shè)計(jì)上對(duì)簡(jiǎn)單口令加強(qiáng)保護(hù)呢?
由于常用口令的MD5值很容易被計(jì)算出來,所以,要確保存儲(chǔ)的用戶口令不是那些已經(jīng)被計(jì)算出來的常用口令的MD5,這一方法通過對(duì)原始口令加一個(gè)復(fù)雜字符串來實(shí)現(xiàn),俗稱“加鹽”:1
hashlib.md5("salt".encode("utf8")) #“加鹽”的內(nèi)容此時(shí)是salt,也可以為賬戶名xuyaping,字符串a(chǎn),數(shù)字1等等
經(jīng)過Salt處理的MD5口令,只要Salt不被***知道,即使用戶輸入簡(jiǎn)單口令,也很難通過MD5反推明文口令。

但是如果有兩個(gè)用戶都使用了相同的簡(jiǎn)單口令比如123456,在數(shù)據(jù)庫中,將存儲(chǔ)兩條相同的MD5值,這說明這兩個(gè)用戶的口令是一樣的。

有沒有辦法讓使用相同口令的用戶存儲(chǔ)不同的MD5呢?

如果假定用戶無法修改登錄名,就可以通過把登錄名作為Salt的一部分來計(jì)算MD5,從而實(shí)現(xiàn)相同口令的用戶也存儲(chǔ)不同的MD5。

摘要算法在很多地方都有廣泛的應(yīng)用。要注意摘要算法不是加密算法,不能用于加密(因?yàn)闊o法通過摘要反推明文),只能用于防篡改,

但是它的單向計(jì)算特性決定了可以在不存儲(chǔ)明文口令的情況下驗(yàn)證用戶口令。

"""
import hashlib
md5=hashlib.md5()
md5.update('how to use md5'.encode('utf-8'))
print(md5.hexdigest())

"""
os模塊是與操作系統(tǒng)交互的一個(gè)接口
os.getcwd() 獲取當(dāng)前工作目錄,即當(dāng)前python腳本工作的目錄路徑
os.chdir()  當(dāng)前目錄
os.chdir("dirname") 改變當(dāng)前腳本工作目錄;相當(dāng)于shell下cd
os.curdir 返回當(dāng)前目錄: ('.'),相當(dāng)于shell下cd.
os.pardir 獲取當(dāng)前目錄的父目錄字符串名:('..'),相當(dāng)于shell下cd.. 返回上一層目錄
os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄
os.removedirs('dirname1') 若目錄為空,則刪除,并遞歸到上一級(jí)目錄,如若也為空,則刪除,依此類推
os.mkdir('dirname') 生成單級(jí)目錄;相當(dāng)于shell中mkdir dirname
os.rmdir('dirname') 刪除單級(jí)空目錄,若目錄不為空則無法刪除,報(bào)錯(cuò);相當(dāng)于shell中rmdir dirname
os.listdir('dirname') 列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印
os.remove() 刪除一個(gè)文件
os.rename("oldname","newname") 重命名文件/目錄
os.stat('path/filename') 獲取文件/目錄信息
os.sep 輸出操作系統(tǒng)特定的路徑分隔符,win下為"\",Linux下為"/"
os.linesep 輸出當(dāng)前平臺(tái)使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep 輸出用于分割文件路徑的字符串 win下為;,Linux下為:
os.name 輸出字符串指示當(dāng)前使用平臺(tái)。win->'nt'; Linux->'posix'
os.system("bash command") 運(yùn)行shell命令,直接顯示
os.environ 獲取系統(tǒng)環(huán)境變量
os.path.abspath(path) 返回path規(guī)范化的絕對(duì)路徑
os.path.split(path) 將path分割成目錄和文件名二元組返回
os.path.dirname(path) 返回path的目錄。其實(shí)就是os.path.split(path)的第一個(gè)元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\結(jié)尾,那么就會(huì)返回空值。即os.path.split(path)的第二個(gè)元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是絕對(duì)路徑,返回True
os.path.isfile(path) 如果path是一個(gè)存在的文件,返回True。否則返回False
os.path.isdir(path) 如果path是一個(gè)存在的目錄,則返回True。否則返回False
os.path.join(path2[, path3[, ...]]) 將多個(gè)路徑組合后返回,第一個(gè)絕對(duì)路徑之前的參數(shù)將被忽略
os.path.getatime(path) 返回path所指向的文件或者目錄的最后存取時(shí)間
os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時(shí)間
os.path.getsize(path) 返回path的大小

五 sys模塊
sys.argv 命令行參數(shù)List,第一個(gè)元素是程序本身路徑
sys.exit(n) 退出程序,正常退出時(shí)exit(0)
sys.version 獲取Python解釋程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模塊的搜索路徑,初始化時(shí)使用PYTHONPATH環(huán)境變量的值
sys.platform 返回操作系統(tǒng)平臺(tái)名稱
"""

文章名稱:Python模塊介紹一
鏈接地址:http://muchs.cn/article2/iioiic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站收錄、網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司