python 常用模塊的使用

Python自動化開發 - 常用模塊(一)

本節內容

1、模塊介紹

2、time&datetime模塊

3、random模塊

4、os模塊

5、sys模塊

6、json&pickle模塊

7、logging模塊

一、模塊介紹

模塊,是一堆代碼實現了某個功能的代碼集合。

類似於函數式編程和麪向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合

而對於一個複雜的功能來,可能需要多個函數才能完成(函數又可以在不同的.py文件中),n個 .py 文件組成的代碼集合就稱爲模塊

如:os 是系統相關的模塊;file是文件操作相關的模塊

模塊分爲三種:

自定義模塊

內置標準模塊(又稱標準庫)

開源模塊

time&datetime模塊

import time
import datetime

print(time.time())     # 通用OS誕生元年至今時間戳
t = time.localtime()   # 返回本地時間的struct time對象格式
print(t)               # 可用於定製化輸出
print("%s-%s-%s %s:%s:%s" % (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec))

print(time.gmtime())  # 返回utc時間的struc時間對象格式


# 日期字符串轉成時間戳
string_2_struct = time.strptime("2017/02/20", "%Y/%m/%d")  # 將日期字符串轉成struct時間對象格式
print(string_2_struct)

struct_2_stamp = time.mktime(string_2_struct)                # 將struct時間對象轉成時間戳
print(struct_2_stamp)

# 將時間戳轉爲字符串格式
print(time.gmtime(time.time()-86640))     # 將utc時間戳轉換成struct_time格式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))  # 將utc struct_time格式轉成指定的字符串格式

# 時間加減
print(datetime.datetime.now())   # 返回系統當前時刻 2017-02-18 15:59:33.948776
print(time.time())               # 時間戳
print(datetime.date.fromtimestamp(time.time()))   # 時間戳直接轉成日期格式 2017-02-18
print(datetime.datetime.now())
print(datetime.datetime.now() + datetime.timedelta(hours=1, minutes=10))  # 當前時間加1小時,10分鐘
print(datetime.datetime.now().replace(year=2016))  # 時間替換爲2016年

random模塊

import random
import string

print(random.randint(1, 10))         # 隨機1-10,包括10的任意整數
print(random.randrange(1, 20, 2))    # 隨機1-20,步長爲2,但不包括20,隨機整數
print(random.sample(range(100), 2))  # 從源列表中任意取2的元素,組成列表

# 生成4位驗證碼
source = string.ascii_uppercase + string.digits
print("".join(random.sample(source, 4)))

os模塊

提供對操作系統進行調用的接口

os.getcwd()          # 獲取當前工作目錄,即當前python腳本工作的目錄路徑
os.chdir("dirname")  # 改變當前腳本工作目錄;相當於shell下cd
os.curdir  # 返回當前目錄: ('.')
os.pardir  # 獲取當前目錄的父目錄字符串名:('..')
os.makedirs('dirname1/dirname2')    # 可生成多層遞歸目錄
os.removedirs('dirname1')           # 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推
os.mkdir('dirname')       # 生成單級目錄;相當於shell中mkdir dirname
os.rmdir('dirname')       # 刪除單級空目錄,若目錄不爲空則無法刪除,報錯;相當於shell中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    # 輸出用於分割文件路徑的字符串
os.name       # 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
os.system("bash command")  # 運行shell命令,直接顯示
os.environ                 # 獲取系統環境變量
os.path.abspath(path)      # 返回path規範化的絕對路徑
os.path.split(path)        # 將path分割成目錄和文件名二元組返回
os.path.dirname(path)      # 返回path的目錄。其實就是os.path.split(path)的第一個元素
os.path.basename(path)     # 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
os.path.exists(path)       # 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)        # 如果path是絕對路徑,返回True
os.path.isfile(path)       # 如果path是一個存在的文件,返回True。否則返回False
os.path.isdir(path)        # 如果path是一個存在的目錄,則返回True。否則返回False
os.path.join(path1[, path2[, ...]])   # 將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略
os.path.getatime(path)  # 返回path所指向的文件或者目錄的最後存取時間
os.path.getmtime(path)  # 返回path所指向的文件或者目錄的最後修改時間

sys模塊

sys.argv           # 命令行參數List,第一個元素是程序本身路徑
sys.exit(n)        # 退出程序,正常退出時exit(0)
sys.version        # 獲取Python解釋程序的版本信息
sys.maxsize         # 最大的Int值
sys.path           # 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform       # 返回操作系統平臺名稱
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]

json&pickle模塊

用於序列化的兩個模塊

json,用於字符串 和 python數據類型間進行轉換

pickle,用於python特有的類型 和 python的數據類型間進行轉換

Json模塊提供了四個功能:dumps、dump、loads、load

pickle模塊提供了四個功能:dumps、dump、loads、load
import pickle

# 更新數據到文檔
account = {
    "id": 1234,
    "password": "abc",
    "credit": 15000,
    "balance": 8000
}

f = open("account.db", "wb")
pickle.dump(account, f)
f.close()

# 從文件讀取數據
f = open("account.db", "rb")
account = pickle.load(f)
f.close()
print(account)

logging模塊

1、基本log功能

很多程序都有記錄日誌的需求,並且日誌中包含的信息既有正常的程序訪問日誌,還可能有錯誤、警告等信息輸出,

Python的logging模塊提供了標準的日誌接口,你可以通過它存儲各種格式的日誌,

logging的日誌可以分爲 debug(), info(), warning(), error() and critical() 5個級別,下面我們看一下簡單輸出信息

logging.warning("user [Jonathan] attempted wrong password more than 3 times")
logging.critical("server is down")

# 輸出結果
WARNING:root:user [Jonathan] attempted wrong password more than 3 times
CRITICAL:root:server is down
瞭解幾個日誌級別代表什麼意思

級別  數字  簡介
DEBUG   10  調試信息
INFO    20  程序正常運行確認信息
WARNING 30  程序告警,或者即將出現的情況(如,磁盤空間不足),但程序仍然可以運行
ERROR   40  程序錯誤,一些功能不能運行
CRITICAL    40  嚴重錯誤,程序不能運行

import logging

logging.basicConfig(filename='example.log',level=logging.INFO)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')

'''
level=loggin.INFO意思是,把日誌紀錄級別設置爲INFO,也就是說,只有比日誌是INFO或比INFO級別更高的日誌纔會被紀錄到文件裏。
在這個例子, 第一條日誌是不會被紀錄的,如果希望紀錄debug的日誌,那把日誌級別改成DEBUG就行了
'''
日誌格式加上時間


import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('is when this event was logged.')
日誌格式總結如下
%(name)s

Logger的名字

%(levelno)s

數字形式的日誌級別

%(levelname)s

文本形式的日誌級別

%(pathname)s

調用日誌輸出函數的模塊的完整路徑名,可能沒有

%(filename)s

調用日誌輸出函數的模塊的文件名

%(module)s

調用日誌輸出函數的模塊名

%(funcName)s

調用日誌輸出函數的函數名

%(lineno)d

調用日誌輸出函數的語句所在的代碼行

%(created)f

當前時間,用UNIX標準的表示時間的浮 點數表示

%(relativeCreated)d

輸出日誌信息時的,自Logger創建以 來的毫秒數

%(asctime)s

字符串形式的當前時間。默認格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒

%(thread)d

線程ID。可能沒有

%(threadName)s

線程名。可能沒有

%(process)d

進程ID。可能沒有

%(message)s

用戶輸出的消息

2、log打印到屏幕和文件日誌

Python 使用logging模塊記錄日誌涉及四個主要類:

logger提供了應用程序可以直接使用的接口;

handler將(logger創建的)日誌記錄發送到合適的目的輸出;

filter提供了細度設備來決定輸出哪條日誌記錄;

formatter決定日誌記錄的最終輸出格式。

它們之間的關係如下圖所示

logger

每個程序在輸出信息之前都要獲得一個logger。logger通常對應了程序的模塊名,比如聊天工具的圖形界面模塊可以這樣獲得它的logger:

LOG = logging.getLogger(”chat.gui”)

而核心模塊可以這樣:

LOG=logging.getLogger(”chat.kernel”)

logger.setLevel(lel):指定最低的日誌級別,低於lel的級別將被忽略。DEBUG是最低的內置級別,CRITICAL爲最高

logger.addFilter(filt)、logger.removeFilter(filt):添加或刪除指定的filter

logger.addHandler(hdlr)、logger.removeHandler(hdlr):增加或刪除指定的handler

logger.debug()、logger.info()、logger.warning()、logger.error()、logger.critical():可以設置的日誌級別



handler

handler對象負責發送相關的信息到指定目的地。

Python的日誌系統有多種Handler可以使用。

 有些Handler可以把信息輸出到控制檯;

 有些Logger可以把信息輸出到文件;

 還有些 Handler可以把信息發送到網絡上;

 如果覺得不夠用,還可以編寫自己的Handler

可以通過addHandler()方法添加多個多handler
Handler.setLevel(lel):指定被處理的信息級別,低於lel級別的信息將被忽略

Handler.setFormatter():給這個handler選擇一個格式

Handler.addFilter(filt)、Handler.removeFilter(filt):新增或刪除一個filter對象


每個Logger可以附加多個Handler。接下來我們就來介紹一些常用的Handler1) logging.StreamHandler

使用這個Handler可以向類似與sys.stdout或者sys.stderr的任何文件對象(file object)輸出信息。它的構造函數是:

StreamHandler([strm])

其中strm參數是一個文件對象。默認是sys.stderr


2) logging.FileHandler

和StreamHandler類似,用於向一個文件輸出日誌信息。不過FileHandler會幫你打開這個文件。它的構造函數是:

FileHandler(filename[,mode])

filename是文件名,必須指定一個文件名。

mode是文件的打開方式。參見Python內置函數open()的用法。默認是’a',即添加到文件末尾



3) logging.handlers.RotatingFileHandler

這個Handler類似於上面的FileHandler,但是它可以管理文件大小。當文件達到一定大小之後,它會自動將當前日誌文件改名,

然後創建 一個新的同名日誌文件繼續輸出。比如日誌文件是chat.log。當chat.log達到指定的大小之後,

RotatingFileHandler自動把 文件改名爲chat.log.1。

不過,如果chat.log.1已經存在,會先把chat.log.1重命名爲chat.log.2。。。最後重新創建 chat.log,繼續輸出日誌信息。它的構造函數是:

RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])

其中filename和mode兩個參數和FileHandler一樣。

maxBytes用於指定日誌文件的最大文件大小。如果maxBytes爲0,意味着日誌文件可以無限大,這時上面描述的重命名過程就不會發生。

backupCount用於指定保留的備份文件的個數。比如,如果指定爲2,當上面描述的重命名過程發生時,原有的chat.log.2並不會被更名,而是被刪除


4) logging.handlers.TimedRotatingFileHandler

Handler和RotatingFileHandler類似,不過,它沒有通過判斷文件大小來決定何時重新創建日誌文件,而是間隔一定時間就自動創建新的日誌文件

重命名的過程與RotatingFileHandler類似,不過新的文件不是附加數字,而是當前時間。它的構造函數是:

TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])

其中filename參數和backupCount參數和RotatingFileHandler具有相同的意義。

interval是時間間隔。

when參數是一個字符串。表示時間間隔的單位,不區分大小寫。它有以下取值:

S 秒

M 分

H 小時

D 天

W 每星期(interval==0時代表星期一)

midnight 每天凌晨
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章