1、自定義模塊
2移层、內(nèi)置模塊
3、開源模塊
os
用于提供系統(tǒng)級(jí)別的操作
os.getcwd() 獲取當(dāng)前工作目錄蕾羊,即當(dāng)前python腳本工作的目錄路徑
os.chdir("dirname") 改變當(dāng)前腳本工作目錄;相當(dāng)于shell下cd
os.curdir 返回當(dāng)前目錄: ('.')
os.pardir 獲取當(dāng)前目錄的父目錄字符串名:('..')
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.renames()
os.stat('path/filename') 獲取文件/目錄信息
os.sep 輸出操作系統(tǒng)特定的路徑分隔符,win下為"\",Linux下為"/"
os.linesep 輸出當(dāng)前平臺(tái)使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep 輸出用于分割文件路徑的字符串
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(path1[, path2[, ...]]) 將多個(gè)路徑組合后返回,第一個(gè)絕對(duì)路徑之前的參數(shù)將被忽略
os.path.getatime(path) 返回path所指向的文件或者目錄的最后存取時(shí)間
os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時(shí)間
sys
用于提供對(duì)解釋器相關(guān)的操作
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)名稱
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]
time & datetime
時(shí)間相關(guān)的操作
時(shí)間有三種表示方式:
時(shí)間戳 1970年1月1日之后的秒,即:time.time()
格式化的字符串 2014-11-11 11:11香浩, 即:time.strftime('%Y-%m-%d')
結(jié)構(gòu)化時(shí)間 元組包含了:年类缤、日、星期等... time.struct_time 即:time.localtime()
random
隨機(jī)數(shù)
>>> import random
>>> random.random()
0.5149354050435956
>>> random.random()
0.009944851377738706
>>> random.randint(1, 2)
1
>>> random.randint(1, 2)
2
>>> random.randrange(1, 10)
5
>>> random.randrange(1, 10)
7
隨機(jī)驗(yàn)證碼實(shí)例:
>>> import random
>>> check_code = ' '
>>> for i in range(4):
current = random.randrange(0, 4)
if current != i:
temp = chr(random.randint(65, 90))
else:
temp = random.randint(0, 9)
check_code += str(temp)
>>> check_code
'X6BF'
hashlib
用于加密相關(guān)的操作邻吭,代替了md5模塊和sha模塊餐弱,主要提供 SHA1, SHA224, ### SHA256, SHA384, SHA512 ,MD5 算法
import hashlib
# ######## md5 ########
hash = hashlib.md5()
hash.update('admin')
print hash.hexdigest()
# ######## sha1 ########
hash = hashlib.sha1()
hash.update('admin')
print hash.hexdigest()
# ######## sha256 ########
hash = hashlib.sha256()
hash.update('admin')
print hash.hexdigest()
# ######## sha384 ########
hash = hashlib.sha384()
hash.update('admin')
print hash.hexdigest()
# ######## sha512 ########
hash = hashlib.sha512()
hash.update('admin')
print hash.hexdigest()
#以上加密算法雖然依然非常厲害囱晴,但時(shí)候存在缺陷膏蚓,即:通過撞庫可以反解。所以畸写,有必要對(duì)加密算法中添加自定義key再來做加密驮瞧。
import hashlib
# ######## md5 ########
hash = hashlib.md5('898oaFs09f')
hash.update('admin')
print hash.hexdigest()
#還不夠吊?python 還有一個(gè) hmac 模塊枯芬,它內(nèi)部對(duì)我們創(chuàng)建 key 和 內(nèi)容 再進(jìn)行處理然后再加密
import hmac
h = hmac.new('wueiqi')
h.update('hellowo')
print h.hexdigest()
#不能再牛逼了B郾省!破停!
copy
淺拷貝
copy.copy()
深拷貝
copy.deepcopy()
shutil
高級(jí)的文件翅楼、文件夾、壓縮包處理
configparser
用于對(duì)特定的配置進(jìn)行操作
logging
用于便捷記錄日志且線程安全的模塊
shelve
json & pickle
用于序列化的兩個(gè)模塊
- json真慢,用于字符串 和 python數(shù)據(jù)類型間進(jìn)行轉(zhuǎn)換
- pickle毅臊,用于python特有的類型 和 python的數(shù)據(jù)類型間進(jìn)行轉(zhuǎn)換
Json模塊提供了四個(gè)功能:dumps、dump黑界、loads管嬉、load
pickle模塊提供了四個(gè)功能:dumps、dump朗鸠、loads蚯撩、load
pickle.dumps將數(shù)據(jù)通過特殊的形式轉(zhuǎn)換為只有python語言認(rèn)識(shí)的字符串
pickle.dump將數(shù)據(jù)通過特殊的形式轉(zhuǎn)換為只有python語言認(rèn)識(shí)的字符串,并寫入文件
json.dumps將數(shù)據(jù)通過特殊的形式轉(zhuǎn)換為所有程序語言都認(rèn)識(shí)的字符串
json.dump將數(shù)據(jù)通過特殊的形式轉(zhuǎn)換為所有程序語言都認(rèn)識(shí)的字符串烛占,并寫入文件
反序列化為 loads 或 load
>>> data = dict(name='Bob', age=20, score=88)
>>> import pickle
>>> with open('C:/Users/Why Me/Desktop/Lp/dump.txt', 'wb'):
pickle.dump(data, f)
看看寫入的dump.txt文件胎挎,一堆亂七八糟的內(nèi)容,這些都是Python保存的對(duì)象內(nèi)部信息忆家。
當(dāng)我們要把對(duì)象從磁盤讀到內(nèi)存時(shí)中燥,可以先把內(nèi)容讀到一個(gè)bytes叛本,然后用pickle.loads()方法反序列化出對(duì)象野哭,也可以直接用pickle.load()方法從一個(gè)file-like Object中直接反序列化出對(duì)象抑淫。我們打開另一個(gè)Python命令行來反序列化剛才保存的對(duì)象:
>>> with open('C:/Users/Why Me/Desktop/Lp/dump.txt', 'rb') as f:
d = pickle.load(f)
>>> d
{'score': 88, 'name': 'Bob', 'age': 20}
Pickle的問題和所有其他編程語言特有的序列化問題一樣,就是它只能用于Python卸例,并且可能不同版本的Python彼此都不兼容称杨,因此肌毅,只能用Pickle保存那些不重要的數(shù)據(jù),不能成功地反序列化也沒關(guān)系姑原。
如果我們要在不同的編程語言之間傳遞對(duì)象悬而,就必須把對(duì)象序列化為標(biāo)準(zhǔn)格式,比如XML页衙,但更好的方法是序列化為JSON摊滔,因?yàn)镴SON表示出來就是一個(gè)字符串,可以被所有語言讀取店乐,也可以方便地存儲(chǔ)到磁盤或者通過網(wǎng)絡(luò)傳輸艰躺。JSON不僅是標(biāo)準(zhǔn)格式,并且比XML更快眨八,而且可以直接在Web頁面中讀取腺兴,非常方便。
JSON表示的對(duì)象就是標(biāo)準(zhǔn)的JavaScript語言的對(duì)象廉侧,JSON和Python內(nèi)置的數(shù)據(jù)類型對(duì)應(yīng)如下:
JSON類型 Python類型
{} dict
[] list
"string" str
1234.56 int或float
true/false True/False
null None
>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> data = json.dumps(d)
>>> data
'{"score": 88, "name": "Bob", "age": 20}'
>>> json.loads(data)
{'score': 88, 'name': 'Bob', 'age': 20}