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