一、定義:
1、模塊:用來從邏輯上組織python代碼(包含:變數,函式,類等),本質是實作一個功能的.py結尾的python檔案,
2、包:用來從邏輯上組織模塊的,本質就是一個目錄,(必須帶有一個__init__.py檔案)
二、匯入方法
1、匯入一個模塊,“import 檔案名(不需要后綴)”,可以使用“檔案名.函式名()”的方式呼叫,
2、匯入多個模塊,“from 檔案夾名(或檔案名) import 檔案名(或函式名、變數名等) ”,但不建議這樣用,因為有重名的方法,后面的會覆寫前面的,造成呼叫混亂,
3、為了區分匯入的模塊,使用as關鍵詞,比如:“from 檔案夾名 import 檔案名 as 呼叫名”,
三、匯入的本質:將要匯入的代碼全部解釋一遍,統一賦值給一個變數
1、"import 模塊名"的本質:將一個檔案中的代碼賦值給一個模塊名,呼叫的時候用“模塊名.變數(或函式)”方式呼叫,
2、“from 檔案夾名(或檔案名) import 模塊名(或函式名、變數名等)”:將檔案中的代碼塊單獨賦值給一個模塊名,如果是匯入函式或者變數,可以直接在代碼中使用,
3、匯入包的本質:就是解釋這個包下面的__init__.py檔案
四、路勁查找
1、匯入檔案會在系統路徑下尋找,系統路勁登記在os.path下面,如下:
import sys print(sys.path)
2、如果任意路徑的檔案模塊需要的匯入,應該怎么做?
import sys,os # 查找目標檔案所在的目錄 base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 將目標檔案模塊的目錄加入到系統路勁下 sys.path.append(base_dir)
五、匯入優化
1、如下代碼重復查找函式,可以做優化
import moudle_test # 以下兩個方法都呼叫了同個模塊下的同個方法,這樣重復查找方法造成了效率低 def a (): moudle_test.test() print("is a()") def b (): moudle_test.test() print("is b()") ## 可以修改成如下方法 from moudle_test import test def a (): moudle_test.test() print("is a()") def b (): moudle_test.test() print("is b()")
六、模塊的分類
1、標準庫(內置模塊):如os,time,datetime
2、開源模塊:第三方寫的開源的,可以免費使用,
3、自定義模塊:自己寫的模塊
七、標準庫
1、random:該模塊實作了各種分布的偽亂數生成器,
# 隨機整數: print random.randint(1,50) # 隨機選取0到100間的偶數: print random.randrange(0, 101, 2) # 隨機浮點數: print random.random() print random.uniform(1, 10) # 隨機字符: print random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()') # 多個字符中生成指定數量的隨機字符: print random.sample('zyxwvutsrqponmlkjihgfedcba',5) # 從a-zA-Z0-9生成指定數量的隨機字符: ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8)) print ran_str # 多個字符中選取指定數量的字符組成新字串: print ''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5)) # 隨機選取字串: print random.choice(['剪刀', '石頭', '布']) # 打亂排序 items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] print random.shuffle(items)
2、os標準庫:本模塊提供了一種使用與作業系統相關的功能的便捷式途徑
import os # 回傳環境變數 print("輸出作業系統分割檔案路勁的字串",os.environ) # 回傳當前作業系統別名,nt代表windows,posix代表linux print("輸出作業系統分割檔案路勁的字串",os.name) # 當前作業目錄 print("當前作業目錄",os.getcwd()) # 當前執行的py檔案 print("當前執行的py檔案路徑",__file__) # 改變當前作業目錄到指定的路徑, print("當前作業目錄到指定的路徑",os.chdir(r"c:/")) # 回傳當前目錄,回傳的是當前執行python檔案的檔案夾,“.”代表當前目錄 print("當前目錄",os.curdir) # 回傳當前目錄的父目錄 print("回傳當前目錄的父目錄",os.pardir) # 遞回依次創建目錄 # print("遞回依次創建目錄c:/a/b/c",os.makedirs("c:/a/b/c")) # 洗掉目錄,只能從最下級目錄開始洗掉 # print("洗掉目錄,只能從最下級目錄開始洗掉",os.rmdir("c:/a/b/c")) # 洗掉目錄,遞回逐級洗掉 # print("洗掉目錄,遞回逐級洗掉",os.removedirs("c:/a/b")) # 列出目錄串列 print("列出目錄串列",os.listdir(os.curdir)) # 修改目錄或檔案名 # print("修改目錄或檔案名",os.rename("c:/a/a.txt","c:/a/ab.txt")) # 洗掉一個檔案 # print("洗掉一個檔案",os.remove("c:/b/a.txt")) # 回傳目錄或檔案的資訊 print("回傳檔案目錄的資訊",os.stat("c:/a/ab.txt")) # 輸出作業系統的路徑分割符,Windows為"\\",Linux為"/" print("輸出作業系統的路徑分割符",os.sep) # 輸出作業系統的換行符,Windows為"\r\n",Linux為"\n" print("輸出作業系統的換行符",str(os.linesep)) # 輸出作業系統分割檔案路勁的字串,為";" print("輸出作業系統分割檔案路勁的字串",os.pathsep) # 呼叫cmd命令列 # print("呼叫cmd命令列",os.system("ipconfig")) # 回傳規范的絕對路勁,用"\"做為路勁分隔符 print("回傳規范的絕對路勁", os.path.abspath(__file__)) # 分割路徑,將檔案分成目錄和檔案的組成的元組,目錄可以不存在 print("分割路徑,將檔案分成目錄和檔案的組成的元組", os.path.split(__file__)) # 回傳檔案所在目錄,即父目錄,目錄可以不存在 print("回傳檔案所在目錄,即父目錄", os.path.dirname(__file__)) # 回傳檔案名,目錄可以不存在 print("回傳檔案所在目錄,即父目錄", os.path.basename(__file__)) # 判斷路勁是否存在 print("判斷路勁是否存在", os.path.exists(__file__)) # 判斷路勁是否為絕對路勁,windwos以盤符開頭,linux以“/”開頭 print("判斷路勁是否為絕對路勁", os.path.isabs(__file__)) # 判斷路勁是否為檔案 print("判斷路勁是否為檔案", os.path.isfile(__file__)) # 判斷路勁是否為目錄 print("判斷路勁是否為目錄", os.path.isdir(__file__)) # 拼接多個路徑回傳,第一個絕對路勁之前的引數會被忽略 print("拼接多個路徑", os.path.join("c","a","b","a.txt")) # 檔案最后訪問時間 print("檔案最后訪問時間", os.path.getatime(__file__)) # 檔案最后修改時間 print("檔案最后修改時間", os.path.getmtime(__file__))
3、sys標準庫:系統相關的引數和函式
# 獲得檔案輸入引數,控制臺輸入“python python檔案名 引數(引數之間用空格間隔)” print(sys.argv) # 回傳作業系統平臺名稱 print(sys.platform) # 回傳python檔案搜索路勁 print(sys.path) # 列印并且計數 print(sys.stdout.write("Hello World"))
4、shutil標準庫:模塊提供了一系列對檔案和檔案集合的高階操作
import shutil # 先打開檔案,后復制檔案 f1 = open("test1", encoding="utf-8") f2 = open("test2", mode="w", encoding="utf-8") shutil.copyfileobj(f1, f2) # 直接復制 shutil.copyfile("test1","test3") # 同時copy檔案和檔案狀態 shutil.copy("test1","test3") # 遞回復制目錄和檔案 shutil.copytree("test","test_new") # 遞回洗掉目錄和檔案 shutil.rmtree("test_new") # # 移動檔案 shutil.move("f1","f2") # # 壓縮 shutil.make_archive("最終得到的壓縮檔案名","壓縮格式如zip等","壓縮路徑")
5、hashlib庫:用于哈希加密
import hashlib md5_test = hashlib.md5() md5_test.update(b"Hello") # 列印Hello的md5的值 print(md5_test.hexdigest()) md5_test.update(b"world") # 列印Helloworld的md5的值,注意這里是update操作,所以是兩段加一起 print(md5_test.hexdigest()) md5_test2 = hashlib.md5() md5_test2.update(b"Helloworld") # 下面一個新物件列印的值也跟上面一樣,證明了是兩段加一起 print(md5_test2.hexdigest()) # 更安全的sha256加密 sha256_test = hashlib.sha256() sha256_test.update(b"Hello") # 列印sha256的值 print(sha256_test.hexdigest()) # 中文處理 sha256_test2 = hashlib.sha256() sha256_test2.update("你好中國".encode(encoding="utf-8")) # 列印sha256的值 print(sha256_test.hexdigest())
6、re模塊:提供正則運算式的操作
- " . ",指代任意一個字符,除了換行之外(如果有加 flags="r.S" 就可以匹配換行),
- " ^ " 和 " \A ",匹配原文本的開頭,意思是從開頭開始匹配
- “ $ ” 和 " \Z ",匹配原文本的末尾,意思是從某處開始一直匹配的原文本的末尾
- “ * ”,匹配*號前面的字符0次或者多次,比如re.findall("ab*","cabb3abcbbac"),結果["abb","ab","a"]
- “ + ”,匹配+號前面的字符1次或者多次,比如"re.findall("ab+","ab+cd+abb+bba")“,結果["abb","ab"]
- “ ? ”,匹配?號前面的字符1次或者0次,如果放在*或者+后面就變成”非貪婪模式“,只回傳最短的匹配字符
- {m},匹配前面字符m次
- {n,m},匹配前面字符n 到m次,比如"re.findall("ab{1,3}","abb abc abbcbbb")“,結果["abb","ab","abb"]、
- “ () ”,分組匹配,可以將括號內的字符當成一個整體來處理,比如"re.findall("(ab){1}","ababc")",結果["ab","ab"]
- “ | ”,匹配|左或右的字符,或者邏輯,
- " \d ",匹配數字
- “ \D ”,匹配非數字,包括特殊字符,
- “ \w ”,匹配[0-9a-zA-Z]
- " \W ”,匹配非[0-9a-zA-Z]
- ” \s ”,匹配空白字符,空格、換行等,
- “ (?P<city>)(?P<birthday>) ”,分組匹配后按所取的鍵名回傳一個字典,比如re.search("(?P<city>(\d){6})(?P<birthday>(\d){8})","350783199306260001").groupdict(),結果是:{'city': '350783', 'birthday': '19930626'}
- " split() ",分割后回傳一個串列,比如print(re.split("\d+","a12b13c")),結果是:[“a”,"b","c"]
- “ sub() ”,替換, 最后一個引數是替換次數,比如print(re.sub(".+","a12b13c",flags=r.S)),結果是:a_b13c
- " flags=r.S ",改變“.”的模式,使其可以匹配換行符,比如:print(re.match(".*" , "a12b13c" , flags=re.S)),結果是:a12b13c
- " flags=r.M ",改變“^”和"$"的模式,使其可以匹配多行,比如:print(re.search("(aaab){1}$","aaa12b13c\naaab\na1da",flags=re.M)),結果是:aaab,如果不加re.M是匹配不到aaab的
- “ flags=r.I ",忽略大小寫,都匹配,比如:print(re.search("(aaab){1}","aaa12b13c\nAaab\na1da",flags=re.I)),結果是:Aaab
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/153377.html
標籤:Python
上一篇:python常用內置函式使用
