整理了幾種python的常用內置模塊.
內置函數思維導圖:https://www.processon.com/view/link/5c7902b1e4b0168e4200846a
re模塊
re(regular expression)就是正則表達式英文的縮寫,也就是說python利用正則進行一些查找,替換等工作。
re模塊的方法:
查找
findall,匹配所有,每一項都是列表中的一個元素,從大段地內容中找出匹配的項,常用指數5星,缺點是提取出來的數據量如果過大不能及時處理的話,浪費內存。
import re
ret = re.findall("\d+","sajdaijdi123124sad12") print(ret) #['123124', '12']
search 主要用於表單驗證,返回的是一個正則匹配的結果,只匹配從左到右的第一個。
import re
ret = re.search("\d+","sajdaijdi123124yfcy23423") print(ret.group()) #123124
group的功能是把匹配結果顯示出來,如果匹配失敗,print(ret)是none,故group(ret)會報錯.
match 從開頭匹配,成功則返回,不成功返回none
import re
ret = re.search("[^\d]+","sjdakjdk123124") print(ret.group()) #sjdakjdk
替換
sub(正則,要替換的,實施的字符串,替換次數)
subn()功能和sub沒太大區別 ,就是能返回替換次數.
import re
s = "我很2,你也很2" ret = re.sub("\d","帥",s,1) #如果不寫次數,默認全部 print(ret) #我很帥,你也很2
分割
split, 和字符串時候使用的方法差不多.注意 被切割的地方會消失不見.
import re
s = "小劉和兄貴1小李和小梅" ret = re.split("\d",s)5[ print(ret) #['小劉和兄貴', '小李和小梅']
進階之compile
把正則表達式進行預編譯,節省時間
import re
ret = re.compile("\d+") res = ret.findall("jksajd123") print(res) #["123"]
進階之finditer
返回迭代器,可以通過for循環讀取數據,節省空間.
import re
ret = re.finditer("\d+","sajdkajd123") for i in ret: print(i.group()) #123
在re中正則表達式的分組的使用
例如:在"<a>wuyuetian</a>"中取出"wuyuetian"
#在findall里,為了findall也能順利取到分組中的內容,用()會優先取括號內的內容
import re
s = "<a>wuyuetian</a>" ret = re.findall(">(\w+)<",s) print(ret)
#分組的序號規則類似於索引,但是記着是從1開始的
s = "<a>wuyuetian</a>"
ret = re.search("(>)(\w+)(<)",s) print(ret.group(2)) #wuyuetian
關於分組命名
?P<name>xxx
s = "<a>wuyuetian</a>"
ret = re.search(">(?<contrnt>\w)<",s) print(ret.group(content)
time模塊
time模塊顧名思義,就是和時間相關的模塊.
在python中時間分為以下幾種:
1,格式化字符串類型時間 : 2018-08-20 或 2018.8.20等
2,結構化時間 : 元組類型 型如:time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=15, tm_min=11, tm_sec=34, tm_wday=0, tm_yday=232, tm_isdst=0)
3,時間戳 , 指的是一個浮點型數字,它代表了從倫敦時間1970年1月1日到現在經歷了多少秒.
#結構化時間 print(time.localtime()) #time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=19, tm_min=11, tm_sec=34, tm_wday=0, tm_yday=232, tm_isdst=0) print(time.localtime().tm_mon) #8 #格式化時間 print(time.strftime('%Y-%m-%d %H:%M:%S')) #2018-08-20 19:18:01 #時間戳 print(time.time()) #1534749546.5685184 print
time模塊補充
上文提到的三種時間表示類型之間能夠相互轉換.
time.strptime() ==> time.mktime()
格式化時間 結構化時間 時間戳
time.strftime() <== time.localtime()
結構化時間作為樞紐的存在,實現時間表現類型的相互轉換.
random模塊
random是隨機數模塊,比較簡單,方法也比較少.
random.randint() 取隨機整數,包括左右邊界
random.randrange() 取隨機整數,不包括右邊界. #既然是range 那肯定還有步長,左右的參數.
random.random() 取隨機小數,0-1之間的小數
random.uniform() 取隨機小數,以傳入參數為范圍
random.shuffle() 打亂傳入的容器的內部順序並返回
random.sample() 隨機返回傳入容器內的元素,可以修改參數修改隨機的個數.
random.choice() 隨機返回
import random print(random.random()) #0.626381041530784 print(random.randint(1,2)) #1或2 #注意: 這里必須要傳參數 print(random.randrange(1,5,2)) #1或3 這里的randrange可以當成range理解 print(random.uniform(1,2)) #1.7422664388978308 lst = [1,2,3,4] random.shuffle(l) #[3,1,4,2] #注意:這里是列表的順序被打亂,打印lst才有結果 print(random.sample("1234",3)) #這里的第一個參數可以傳多種容器類的數據類型,第二個參數代表了隨機取出幾個數 print(random.choice("123456")) #隨機選擇一個 返回,參數和sample的第一個參數性質一樣
sys模塊
sys模塊是和python解釋器進行交互的接口,較為容易理解.
sys.argv() 這個算是用的比較多的一個方法了,list,返回的第一個元素是程序本身的路徑,之后的 就是運行程序是輸入的內容.多用於用戶交互.
sys.version 返回解釋器的版本信息.
sys.exit() 正確退出exit(0),異常退出exit(1)
sys.path 返回模塊的搜索路徑
sys.modules() 返回我們所導入的模塊的內存地址,可以當模塊名使用.
sys.getcheckintval() 查看GIL的切換的指令數.
sys.setrecursionlimit() 查看並能更改遞歸的最大次數.
sys.studin() 獲取標准輸入
sys.studout 獲取標准輸出
import sys a = sys.argv(1) if a =="有點小帥": print("謝謝") #命令行輸入 python (路徑) ,"有點小帥" #返回 "謝謝" sys.version #3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] sys.path() #一個路徑 print(sys.modules["time"].time()) #1534754176.2376733 沒錯 返回的是時間戳
import sys #關於exit()異常處理
try: sys.exit(1) except SystemExit as e: print(e) #1
getopt模塊
getopt模塊大家可能見到的比較少,在網上各式各樣的解釋也讓人眼花繚亂,這里說一下我的理解。
getopt模塊有兩個方法,這里主要介紹getopt.getopt()。它的作用其實兩個字就能說明:匹配。
getopt.getopt會返回匹配到的命令行參數和參數值組成的元組。
有三個參數:
1,命令行參數,我們可以通過sys.argv[1:]來獲取,把路徑元素跳過。
2,短參數的匹配規則。短參數就是 -h,-l,-v這種的,加上 `:`就代表":"左右兩邊的參數有值。
3,長參數的匹配規則,長參數就是-help,-version,-command這種,加上`=`就代表該參數有值。
有兩個返回值:
1,匹配到的命令行參數及其值 組成的元組 構成的列表。
2,未匹配到的命令行參數。
示例代碼:
輸出結果:
os模塊
os模塊是和操作系統相關的一個模塊.是和操作系統進行交互的接口.
os.popen() 和 os.system() 都是執行字符串類型的操作系統命令,可以類比eval和exec這兩個內置函數,這兩個內置函數是執行字符串類型的python代碼
os.popen()適合做查看類的工作,如查看"cat"
os.system適合做直接執行不需返回的操作,如刪除"rm"
os.getcwd() 打印當前工作目錄
os.chdir() 切換當前的工作目錄
os.makedirs() 遞歸創建多個文件夾(空)
os.removedirs() 遞歸刪除多個文件夾(空)
os.mkdir() 創建一個文件夾
os.rmdir() 刪除一個文件夾
os.listdir() 列出指定目錄下所有的文件和文件夾
os.remove() 刪除一個文件
os.rename]() 重命名一個文件
os.stat() 獲取信息 #注:os.stat().st_size獲取文件大小
os.path.abspath() 它有兩個功能,把不規范的路徑格式修改成操作系統默認的格式
能夠給能夠找到的相對路徑修改成絕對路徑
os.path.split() 把文件路徑分為兩段,第二段是一個文件或者文件夾 返回的是一個元組
os.path.dirname() 返回目錄
os.path.basename 返回文件名 這兩個就是os.path.split()的返回值 都是字符串
os.path.exists() 判斷文件或者文件夾是否存在
os.path.isabs() 判斷是否為絕對路徑
os.path.isdir() 判斷是否為文件夾
os.path.isfile() 判斷是否為文件
os.path.join("","") 拼接
os.path.getatime() 返回文件最后的修改時間
os.path.getsize() 查看文件的大小
注意: 所有的文件夾至少是4096個字節,創建文件夾是64個字節無法用python統計一個文件夾中所有文件的大小
pickle和json序列化模塊
pickle和json都是具有dump,load,jumps,loads
都是類型轉換,但是json更具有局限性,它不能處理集合,字典的key也必須是字符串,等等
pickle就沒這些局限性,並且json的jump和load不能做到連續多次序列化和反序列化.
注意 由於pickle返回的結果是字節,在用dump和load進行文件操作時,要用rb和wb模式打開文件.
uuid模塊
uuid.uuid4() 返回隨機的五組由數字和字母組成的UUID類型的語句,如a8d04eea-191a-4cdc-b4de-0c71f9c463cf , 可以被str強轉.
subprocess模塊
subprocess模塊主要是用來執行外部命令的模塊,
1,subprocess.call(),執行命令,並返回執行狀態,其中shell參數為False時,命令需要通過列表的方式傳入,當shell為True時,可直接傳入命令。
2,subprocess.check_call(),增加當返回值不為0時,直接拋出異常。。
3,subprocess.check_output(),它會做兩件事:
· 檢查返回值,如果不為0則代表當前進程執行失敗。
· 返回標准輸出結果