1、Random模塊
random是內建(built-in)函數,作用是產生隨機數。
首先導入random模塊,然後就可以開始調用其下所包含的函數,使用 dir(random)可以查看random模塊下有哪些函數,結果如下:
![Python代碼的“插件”——模塊系列(二)](http://p2.ttnews.xyz/loading.gif)
import random
dir(random)
#['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_BuiltinMethodType', '_MethodType', '_Sequence
#', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_acos', '_bisect
#', '_ceil', '_cos', '_e', '_exp', '_inst', '_itertools', '_log', '_pi', '_random', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom'
#, '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate',
#'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvaria
#te']
我們來講解一下random中經常調用的一些函數
*random.random()
生成一個0到1之間的隨機浮點數,包括0但不包括1,也就是[0.0, 1.0)。
![Python代碼的“插件”——模塊系列(二)](http://p2.ttnews.xyz/loading.gif)
import random
print(random.random()) #大於0且小於1之間的小數
#0.516046835093513
*random.uniform(a,b)
生成a、b之間的隨機浮點數。不過與randint不同的是,a、b可以不是整數,也不用考慮大小。
print(random.uniform(1,3))#大於1小於3的小數
#2.9022582829640955
*random.choice(n)
從序列中隨機選取一個元素。n需要是一個序列,比如list、元組、字符串。
print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
#[4, 5]
*random.sample(p, k)
從p序列中,隨機獲取k個元素,生成一個新序列。sample不改變原來序列。
這個模塊還支持三角、β分佈、指數分佈、伽馬分佈、高斯分佈等等非常專業的隨機算法的哦。
print(random.sample([1,"23",[4,5]],2))#列表元素任意2個組合
#[1, '23']
*random.shuffle(x)
把序列x中的元素順序打亂。shuffle直接改變原有的序列。
item=[1,3,5,7,9]
random.shuffle(item) #打亂item的順序,相當於"洗牌"
print(item)
#[7, 3, 1, 9, 5]
2、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.environ 獲取系統環境變量
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的大小
來看看示例:
import os
print(os.getcwd())
#D:\資料夾\python\\untitled
3、SYS模塊
sys.argv 命令行參數List,第一個元素是程序本身路徑
sys.exit(n) 退出程序,正常退出時exit(0)
sys.version 獲取Python解釋程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform 返回操作系統平臺名稱
import sys
print(sys.version)
#3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)]
獲取Python版本信息
4、json
JSON表示出來就是一個字符串,可以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。JSON不僅是標準格式,並且比XML更快,而且可以直接在Web頁面中讀取,非常方便。
JSON表示的對象就是標準的JavaScript語言的對象,JSON和Python內置的數據類型對應如下:
Json模塊提供了四個功能:dumps、dump、loads、load
import json
dic = {"k1":"v1","k2":"v2","k3":"v3"}
str_dic = json.dumps(dic) #序列化:將一個字典轉換成一個字符串
print(type(str_dic),str_dic) #<class> {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json轉換完的字符串類型的字典中的字符串是由""表示的
dic2 = json.loads(str_dic) #反序列化:將一個字符串格式的字典轉換成一個字典
#注意,要用json的loads功能處理的字符串類型的字典中的字符串必須由""表示
print(type(dic2),dic2) #<class> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
list_dic = [1,["a","b","c"],3,{"k1":"v1","k2":"v2"}]
str_dic = json.dumps(list_dic) #也可以處理嵌套的數據類型
print(type(str_dic),str_dic) #<class> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
<class> {"k1": "v1", "k2": "v2", "k3": "v3"}
<class> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
<class> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
<class> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
/<class>/<class>/<class>/<class>/<class>/<class>/<class>/<class>
import json
f = open("json_file","w")
dic = {"k1":"v1","k2":"v2","k3":"v3"}
json.dump(dic,f) #dump方法接收一個文件句柄,直接將字典轉換成json字符串寫入文件
f.close()
f = open("json_file")
dic2 = json.load(f) #load方法接收一個文件句柄,直接將文件中的json字符串轉換成數據結構返回
f.close()
print(type(dic2),dic2)
#<class> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
/<class>
5、pickle
Python提供的pickle模塊可以序列化對象並保存到磁盤中,並在需要的時候讀取出來,任何對象都可以執行序列化操作。
注意:Pickle的問題和所有其他編程語言特有的序列化問題一樣,就是它只能用於Python,並且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的數據,不能成功地反序列化也沒關係。
import pickle
dic = {"name": "alvin", "age": 23,"sex":"male"}
print(type(dic)) # <class>
j = pickle.dumps(dic)
print(type(j)) # <class>
f = open("序列化對象_pickle","wb") # 注意是w是寫入str,wb是寫入bytes,j是'bytes'
f.write(j) # -------------------等價於pickle.dump(dic,f)
f.close()
# -------------------------反序列化
import pickle
f = open("序列化對象_pickle","rb")
data = pickle.loads(f.read()) # 等價於data=pickle.load(f)
print(data["age"])
#<class>
#<class>
#23
/<class>/<class>/<class>/<class>
閱讀更多 IT易學網 的文章