1、模塊:
(1)定義:在python裏,將一個.py文件稱之爲一個模塊(Module)
(2)模塊的好處:
- 大大提高了代碼的可維護性
- 可以被其他模塊引用,提高效率
- 避免函數名和變量名重複報錯
(3)模塊的分類: - python標準庫(例如import time)
- 第三方模塊(第三方插件等)
- 應用程序自定義模塊(自己寫的)
2、__name__的兩個用法
(1)被調用模塊的自我測試
if __name__=="__main__":
print("test測試本模塊功能")
(2)禁止別的模塊調用該模塊,防止其他衝突
if __name__=="__main__":
main.run()
(3)放在被調用函數裏執行,結果爲main;放在調用函數裏執行,結果是其文件路徑名
3、時間模塊的使用
(1)strftime(format[,t])——把一個代表時間的元組或者struct_time(由time.localtime()和time.gmtime()轉化爲格式化的時間字符串,如果t未指定,將傳入time.localtime().)
import time
print(time.strftime("%Y-%m-%d %X",time.localtime()))
#輸出結果:
2020-01-26 16:58:19
(2)strptime(string[,format])——把一個格式化字符串轉化爲struct_time,實際上和strftime()是逆操作
import time
print(time.strptime("2020-01-26 17:01:21","%Y-%m-%d %X"))
#輸出結果:
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=26, tm_hour=17, tm_min=1, tm_sec=21, tm_wday=6, tm_yday=26, tm_isdst=-1)
(3)datetime
import datetime
print(datetime.datetime.now())
#輸出結果:
2020-01-26 17:18:44.951699
4、隨機模塊(random)
(1)random
import random
ret=random.random()
print(ret)
#輸出結果:
0.3696590055819927
(2)print(randint(1,3))———1,2,3,整數的閉區間[1,3]
(3)print(randrange(1,3))———1,2,整數的半開半閉區間[1,3)
(4)print(choice([1,2,3]))——隨機選取列表中的一個值
(5)print(sample([1,2,3],2))——隨機選取列表中的兩個值
(6)print(uniform(1,3))——選任意類型的浮點型2.408009332454876
(7)shuffle——將列表順序打亂隨機輸出
import random
item=[1,2,3,4,5]
random.shuffle(item)
print(item)
#輸出結果:
[1, 3, 5, 2, 4]
5、隨機驗證碼實例
import random
def code():
ret=""
for i in range(5):
num=random.randint(0,9)
alf=chr(random.randint(65,122))
s=str(random.choice([num,alf]))
ret+=s
return ret
print(code())
#輸出結果:
數字+字母的隨機五位(不知道爲啥有特殊字符)
6、BASE_DIR
使用BASE_DIR可以取到絕對路徑、相對路徑,使用方法如下:
打印__file__可以查看當前文件路徑
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
7、os模塊
(1)定義:os模塊是與操作系統交互的一個接口
(2)os模塊方法(很多用法和Linux相似)
- os.getcwd()——獲取當前python腳本的目錄路徑
- os.chdir(“dirname”)——改變當前腳本目錄;相當於shell下cd
- os.curdir(".")——返回當前目錄
- os.pardir("…")——獲取當前目錄的父母了字符串名
- os.makedirs(“dirname1/dirname2”)——可生成多層遞歸目錄
- os.removedirs()——若目錄爲空,則刪除,並遞歸到上一級目錄,若也爲空,則刪除,以此類推
- os.mkdir(“dirname”)——生成單級目錄
- os.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.system(“bash command”)——運行shell命令,直接顯示
- os.environ——獲取系統環境變量
- os.path.abspath(path)——獲取path規範化的絕對路徑
- os.path.split(path)——將path分成目錄和文件名二元組返回
import os
print(os.path.split("/Users/baijie/PycharmProjects/Test/venv/bin/python /Users/baijie/PycharmProjects/Test/venv/hhh/1.py"))
#輸出結果:
('/Users/baijie/PycharmProjects/Test/venv/bin/python /Users/baijie/PycharmProjects/Test/venv/hhh', '1.py')
- os.path.dirname(path)——返回path目錄,上面輸出結果中元組的第一個元素
- os.path.basename(path)——返回文件名,上面元組中第二個元素
- os.path.exists(path)——判斷路徑是否存在,返回結果爲True或者False
- os.path.isabs(path)——判斷是否是絕對路徑
- os.path.isfile(path)——判斷是否是存在的文件
- os.path.isdir(path)——判斷是否是存在的目錄
- os.path.join(path1[,path2[,…]])——將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略
- os.path.getatime(path)——返回path文件或者目錄的最後存取時間
- os.path.getmtime(path)——返回path文件或者目錄的最後修改時間
8、sys模塊
(1)進度條實例
import time
import sys
for i in range(100):
sys.stdout.write("#")
time.sleep(0.1)
sys.stdout.flush()
(2)sys.path——查看當前目錄
(3)sys.version——獲取當前解釋器的版本
9、json模塊
(1)json主要用於處理數據
(2)json.dumps()——將所有的數據類型轉換成json字符串格式
**說明:**原理就是將單引變雙引,沒有引號直接加雙引
(3)json.loads()——還原成原來的數據類型
說明: loads不必須在dumps使用後纔可以,只要是符合json格式規則,即都是雙引號就可以使用
10、pickle模塊
pickle模塊和json模塊方法相同,只是表現形式不同,json是轉換爲字符串,pickle轉換成字節。
11、序列化
定義:我們把對象(變量)從內存中變成可存儲或傳輸的過程稱之爲序列化,序列化之後,就可以把序列化的內容寫入磁盤,或者通過網絡傳輸到別的機器上。反之,把變量內容從序列化的對象重新讀到內存裏稱之爲反序列化。
12、XML模塊
xml是實現 不同語言或程序之間進行數據交換的協議,跟json差不多,但json使用起來更加簡單,至今還有很多傳統公司如金融行業的很多系統的接口還是xml,xml是通過<>節點數據結構的。
13、re模塊
(1)就其本質而言,正則表達式(re)是一種小型的、高度專業化的編碼語言,它內嵌在python中,並通過re模塊實現,正則表達式模式被編譯成一系列的字節碼,然後由C編寫的匹配引擎執行。
(2)正則表達式用處:用於模糊匹配
(3)小實例:找出字符串中的數字(假如姓名年齡寫一起了)
import re
s="alex22kangkang34bcde45"
s1=re.findall("\d+",s)
print(s1)
#輸出結果:
['22', '34', '45']
(4)正則表達式說明(所有的正則都是針對其前面一個字符說的)
- 普通字符:大多數字符和字母都會和自身相匹配
import re
ls=re.findall("abcde","abcdeoo0pdfd")
print(ls)
#輸出結果:
['abcde']
說明:
前面是要查找的字符,後面是全部字符串,如果查找的字符串不存在,輸出[]
- 元字符:. ^ $ * + ? {} [] | ()
1).是通配符 ,一個.代表一個字符
import re
a=re.findall("a..d","abcdeoo0pdfd")
b=re.findall("..","abcdeoo0pdfd")
print(a)
print(b)
#輸出結果:
['abcd']
['ab', 'cd', 'eo', 'o0', 'pd', 'fd']
2)^用於查看開頭的字符串,只能在字符串的開頭匹配內容
import re
a=re.findall("^a..d","abcdeoo0pdfd")
print(a)
#輸出結果:
['abcd']
3)$用於查找結尾的字符串
import re
a=re.findall("..fd$","abcfdeoo0pdfd")
print(a)
#輸出結果:
['pdfd']
4)*、+、?的區別
*匹配範圍[0,+00),+匹配範圍[1,+00),?匹配範圍[0,1],均符合貪婪匹配規則,有則取最大的
import re
a=re.findall("abd*","abcfdeoodab")
b=re.findall("abd+","abcfdeoodab")
print(a)
print(b)
#輸出結果:
['ab', 'ab']
[]
還可以混合使用
import re
a=re.findall("alex*?","abcfdealexxxxxx")
b=re.findall("alex+?","abcfdealexxxxxx")
print(a)
print(b)
#輸出結果:
['ale']
['alex']
5){}中間內容自定義,格式{a}、{a,b}、{a,}不寫默認爲無窮
6)[]或,只取一個
import re
a=re.findall("a[bl]","abcfdealexxxxxx")
b=re.findall("a[a-z]","abc")
print(a)
print(b)
#輸出結果:
['ab', 'al']
['ab']
7)當^放在[]裏面時,表示非
import re
b=re.findall("a[^a-z]","a97bc0987654")
print(b)
#輸出結果:
['a9']
8)如果想找的字符中包含元字符,用\,轉義一下就是普通的字符了,查找最裏面層()的內容,看實例
import re
a=re.findall("\([^()]*\)","12+66*6+2-8*(2-1)")
print(a)
#輸出結果:
['(2-1)']
9)\爲轉義字符,,可以讓有意義的變沒意義,沒意義的變有意義
,即讓元字符變成普通字符,讓普通字符變成有意義的字符
\d——匹配任何十進制數,相當於[0-9]
\D——匹配任何非數字字符,相當於[^0-9]
\s——匹配任何空白字符,相當於[\t\n\r\f\v]
\S——匹配任何非空白字符,相當於[^\t\n\r\f\v]
\w——匹配任何字母數字字符,相當於[a-zA-Z0-9_]
\W——匹配任何非字母數字字符,相當於[^a-zA-Z0-9_]
\b——匹配一個特殊字符邊界,比如空格、#、@
10)| 爲或,|作爲分割線,查找左右兩側的,左側爲一個整體,右側爲一個整體
import re
a=re.findall("cb|a","cb90hfjsfafbfj")
print(a)
#輸出結果:
['cb', 'a']
11)()分組
12)search()——查找一次就結束
import re
a=re.search("[a-z]+","alex36kangkang18").group()
print(a)
#輸出結果:
alex
13)?P也是分組,看實例
import re
a=re.search("(?P<name>[a-z]+)\d+","alex36kangkang18").group()
print(a)
#輸出結果:
alex36
加了分組,根據相應組名搜索,如下
import re
a=re.search("(?P<name>[a-z]+)\d+","alex36kangkang18").group("name")
print(a)
#輸出結果:
alex
import re
a=re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36kangkang18").group("name","age")
print(a)
#輸出結果:
('alex', '36')
13)split()——將字符去掉,並且分組,去掉的以”“顯示
import re
a=re.split("[abc]","ablalalaoooccd")
print(a)
#輸出結果:
['', '', 'l', 'l', 'l', 'ooo', '', 'd']
14)sub()——替換字符串
參數有4個,第一爲需要替換的字符,第二爲想要替換成的字符,第三爲全部字符串,第四爲替換幾個,第四可有可無
import re
a=re.sub("\d","A","abcde00008888",2)
print(a)
#輸出結果:
abcdeAA008888
15)subn()——可以自動統計替換次數
import re
a=re.subn("\d","A","abcde00008888")
print(a)
#輸出結果:
('abcdeAAAAAAAA', 8)
14、Class
__init __()函數不能有返回值,默認返回爲None