一、模塊介紹
1. 定義:
模塊:本質(zhì)就是.py結(jié)尾的python文件(文件名:test.py,對(duì)應(yīng)的模塊名:test)
用來(lái)從邏輯上組織python代碼(變量,函數(shù),類,邏輯:實(shí)現(xiàn)一個(gè)功能)
更多Python視頻、源碼、資料加群683380553免費(fèi)獲取
2. 語(yǔ)法:
import 語(yǔ)句
當(dāng)解釋器遇到import語(yǔ)句,如果模塊在當(dāng)前的搜索路徑就會(huì)被導(dǎo)入。搜索路徑是一個(gè)解釋器會(huì)先進(jìn)行搜索的所有目錄的列表。
導(dǎo)入模塊:
調(diào)用符號(hào):
From…import 語(yǔ)句
Python的from語(yǔ)句讓你從模塊中導(dǎo)入一個(gè)指定的部分到當(dāng)前命名空間中。語(yǔ)法如下:
From…import* 語(yǔ)句
把一個(gè)模塊的所有內(nèi)容全都導(dǎo)入到當(dāng)前的命名空間也是可行的,只需使用如下聲明:
這提供了一個(gè)簡(jiǎn)單的方法來(lái)導(dǎo)入一個(gè)模塊中的所有項(xiàng)目。慎用 from…import *。
import 和 from 的區(qū)別:
import導(dǎo)入使用時(shí),加前綴 module.func()。相當(dāng)于把模塊代碼放在當(dāng)前文件中執(zhí)行一遍。
from可以指定需要的函數(shù)或變量導(dǎo)入。
導(dǎo)入模塊和當(dāng)前py文件都有同一個(gè)函數(shù),調(diào)用會(huì)調(diào)用哪一個(gè)?
因?yàn)閜ython是解釋型,所以后面覆蓋前面。
from … import … as …
3. import本質(zhì)
import 本質(zhì):
導(dǎo)入一個(gè)模塊本質(zhì)就是解釋執(zhí)行一個(gè)python文件
導(dǎo)入一個(gè)包本質(zhì)就是解釋該包下的__init__.py文件
__init__.py
包:本質(zhì)就是一個(gè)目錄(必須帶有一個(gè)__init__.py文件),用來(lái)從邏輯上組織模塊
導(dǎo)入包,怎么導(dǎo)入?
導(dǎo)入包的本質(zhì):執(zhí)行包下面的__init__.py文件
導(dǎo)入包下的模塊
包下面的模塊,這樣調(diào)用是錯(cuò)誤的
在__init__.py內(nèi)容中導(dǎo)入模塊
4、路徑搜索和搜索路徑
上面提到的都是導(dǎo)入同級(jí)目錄下的模塊,如果不在同一個(gè)目錄下:
import module_name實(shí)際找module_name.py文件,是文件就一定要有路徑。
導(dǎo)入模塊就是:找到.py文件的位置,把它執(zhí)行一遍,從哪里找呢?sys.path.
- # 以上可見(jiàn):sys.path 是一個(gè)列表
- # 里面的 '' 指的當(dāng)前路徑,這是為何查找模塊先從當(dāng)前目錄查找的原因
- os.path.abspath(__file__) # 當(dāng)前文件絕對(duì)路
- os.path.dirname(os.path.abspath(__file__)) #獲取目錄名
- sys.path.append() :追加到最后
- # 所以:可以如下,動(dòng)態(tài)添加路徑到第一
- sys.path.insert
5. 導(dǎo)入優(yōu)化
6. 阻止屬性導(dǎo)入
如果你不想讓某個(gè)模塊屬性被 “from module import *” 導(dǎo)入 , 那么你可以給你不想導(dǎo)入的屬性名稱加上一個(gè)下劃線( _ )。 不過(guò)如果你導(dǎo)入了整個(gè)模塊或是你顯式地導(dǎo)入某個(gè)屬性這個(gè)隱藏?cái)?shù)據(jù)的方法就不起作用了。
二、模塊的分類
a:標(biāo)準(zhǔn)庫(kù)
b:開(kāi)源模塊-第三方模塊
c:自定義模塊
三、常用內(nèi)置模塊
1、os模塊
用于提供系統(tǒng)級(jí)別的操作
2、time和datetime
在Python中,通常有這幾種方式來(lái)表示時(shí)間:
時(shí)間戳
格式化的時(shí)間字符串
元組(struct_time)共九個(gè)元素。
由于Python的time模塊實(shí)現(xiàn)主要調(diào)用C庫(kù),所以各個(gè)平臺(tái)可能有所不同。
UTC(Coordinated Universal Time,世界協(xié)調(diào)時(shí))亦即格林威治天文時(shí)間,世界標(biāo)準(zhǔn)時(shí)間。在中國(guó)為UTC+8。DST(Daylight Saving Time)即夏令時(shí)。
時(shí)間戳(timestamp)的方式:通常來(lái)說(shuō),時(shí)間戳表示的是從1970年1月1日00:00:00開(kāi)始按秒計(jì)算的偏移量。我們運(yùn)行“type(time.time())”,返回的是float類型。返回時(shí)間戳方式的函數(shù)主要有time(),clock()等。
元組(struct_time)方式:struct_time元組共有9個(gè)元素,返回struct_time的函數(shù)主要有g(shù)mtime(),localtime(),strptime()。
時(shí)間轉(zhuǎn)為時(shí)間戳
格式化時(shí)間字符串
轉(zhuǎn)化時(shí)間戳和元組到時(shí)間字符串
時(shí)間加減
3、random模塊
4、sys模塊
5、shutil模塊
高級(jí)的 文件、文件夾、拷貝、壓縮包等 處理模塊
6、ConfigParser
用于對(duì)特定的配置進(jìn)行操作,當(dāng)前模塊的名稱在 python 3.x 版本中變更為 configparser。
來(lái)看一個(gè)好多軟件的常見(jiàn)文檔格式如下
如果想用python生成一個(gè)這樣的文檔怎么做呢?
· 生成
· 讀取出來(lái)
· configparser增刪改查語(yǔ)法
7、hashlib模塊
用于加密相關(guān)的操作,3.x里代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,hash 加密都是bytes類型
python 還有一個(gè) hmac 模塊,它內(nèi)部對(duì)我們創(chuàng)建 key 和 內(nèi)容 再進(jìn)行處理然后再加密
8、Subprocess模塊
調(diào)用subprocess.run(…)是推薦的常用方法,在大多數(shù)情況下能滿足需求,但如果你可能需要進(jìn)行一些復(fù)雜的與系統(tǒng)的交互的話,你還可以用subprocess.Popen(),語(yǔ)法如下:
可用參數(shù):
args:shell命令,可以是字符串或者序列類型(如:list,元組)
bufsize:指定緩沖。0 無(wú)緩沖,1 行緩沖,其他 緩沖區(qū)大小,負(fù)值 系統(tǒng)緩沖
stdin, stdout, stderr:分別表示程序的標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤句柄
preexec_fn:只在Unix平臺(tái)下有效,用于指定一個(gè)可執(zhí)行對(duì)象(callable object),它將在子進(jìn)程運(yùn)行之前被調(diào)用
close_sfs:在windows平臺(tái)下,如果close_fds被設(shè)置為True,則新創(chuàng)建的子進(jìn)程將不會(huì)繼承父進(jìn)程的輸入、輸出、錯(cuò)誤管道。 所以不能將close_fds設(shè)置為True同時(shí)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入、輸出與錯(cuò)誤(stdin, stdout, stderr)。
shell:同上
cwd:用于設(shè)置子進(jìn)程的當(dāng)前目錄
env:用于指定子進(jìn)程的環(huán)境變量。如果env = None,子進(jìn)程的環(huán)境變量將從父進(jìn)程中繼承。
universal_newlines:不同系統(tǒng)的換行符不同,True -> 同意使用
startupinfo與createionflags只在windows下有效 將被傳遞給底層的CreateProcess()函數(shù),用于設(shè)置子進(jìn)程的一些屬性,如:主窗口的外觀,進(jìn)程的優(yōu)先級(jí)等等
終端輸入的命令分為兩種:
· 輸入即可得到輸出,如:ifconfig
· 輸入進(jìn)行某環(huán)境,依賴再輸入,如:python
需要交互的命令示例
9、re-正則表達(dá)式模塊
常用正則表達(dá)式符號(hào)
最常用的匹配語(yǔ)法
分組匹配 和 group()、groups()、groupdict()
10、logging模塊
python的logging模塊提供了標(biāo)準(zhǔn)的日志接口,你可以通過(guò)它存儲(chǔ)各種格式的日志,logging的日志可以分為 debug(), info(), warning(), error() and critical() 5個(gè)級(jí)別,下面我們看一下怎么用。
最簡(jiǎn)單用法
看一下這幾個(gè)日志級(jí)別分別代表什么意思
如果想把日志寫到文件里,也很簡(jiǎn)單
其中下面這句中的level=loggin.INFO意思是,把日志紀(jì)錄級(jí)別設(shè)置為INFO,也就是說(shuō),只有比日志是INFO或比INFO級(jí)別更高的日志才會(huì)被紀(jì)錄到文件里,在這個(gè)例子, 第一條日志是不會(huì)被紀(jì)錄的,如果希望紀(jì)錄debug的日志,那把日志級(jí)別改成DEBUG就行了。
如果想同時(shí)把log打印在屏幕和文件日志里,就需要了解一點(diǎn)復(fù)雜的知識(shí) 了
11、json和pickle數(shù)據(jù)序列化
str eval
數(shù)據(jù)序列化
json只能處理簡(jiǎn)單的,所有語(yǔ)言通用的,函數(shù)不能json序列化
pickle可以序列化python所有的數(shù)據(jù)類型
12、shelve 模塊
shelve模塊是一個(gè)簡(jiǎn)單的k,v將內(nèi)存數(shù)據(jù)通過(guò)文件持久化的模塊,可以持久化任何pickle可支持的python數(shù)據(jù)格式
13、xml處理模塊
xml是實(shí)現(xiàn)不同語(yǔ)言或程序之間進(jìn)行數(shù)據(jù)交換的協(xié)議,跟json差不多,但json使用起來(lái)更簡(jiǎn)單,json之前的交換方式
14、PyYAML模塊
Python也可以很容易的處理ymal文檔格式,只不過(guò)需要安裝一個(gè)模塊
|