Python代碼的“插件”——模塊系列(二)

1、Random模塊

random是內建(built-in)函數,作用是產生隨機數。

首先導入random模塊,然後就可以開始調用其下所包含的函數,使用 dir(random)可以查看random模塊下有哪些函數,結果如下:

Python代碼的“插件”——模塊系列(二)

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代碼的“插件”——模塊系列(二)

import random
print(random.random()) #大於0且小於1之間的小數
#0.516046835093513

*random.uniform(a,b)

生成a、b之間的隨機浮點數。不過與randint不同的是,a、b可以不是整數,也不用考慮大小。

Python代碼的“插件”——模塊系列(二)

print(random.uniform(1,3))#大於1小於3的小數
#2.9022582829640955

*random.choice(n)

從序列中隨機選取一個元素。n需要是一個序列,比如list、元組、字符串。

Python代碼的“插件”——模塊系列(二)

print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
#[4, 5]

*random.sample(p, k)

從p序列中,隨機獲取k個元素,生成一個新序列。sample不改變原來序列。

這個模塊還支持三角、β分佈、指數分佈、伽馬分佈、高斯分佈等等非常專業的隨機算法的哦。

Python代碼的“插件”——模塊系列(二)

print(random.sample([1,"23",[4,5]],2))#列表元素任意2個組合
#[1, '23']

*random.shuffle(x)

把序列x中的元素順序打亂。shuffle直接改變原有的序列。

Python代碼的“插件”——模塊系列(二)

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

Python代碼的“插件”——模塊系列(二)

3、SYS模塊

sys.argv 命令行參數List,第一個元素是程序本身路徑

sys.exit(n) 退出程序,正常退出時exit(0)

sys.version 獲取Python解釋程序的版本信息

sys.maxint 最大的Int值

sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值

sys.platform 返回操作系統平臺名稱

Python代碼的“插件”——模塊系列(二)

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內置的數據類型對應如下:

Python代碼的“插件”——模塊系列(二)

Json模塊提供了四個功能:dumps、dump、loads、load

Python代碼的“插件”——模塊系列(二)

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>
Python代碼的“插件”——模塊系列(二)

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保存那些不重要的數據,不能成功地反序列化也沒關係。

Python代碼的“插件”——模塊系列(二)

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>


分享到:


相關文章: