今日學習內容總結2.3
今日學習內容總結
日誌模組的主要組成部分
日誌的組成部分:
1.Logger:記錄器
記錄器即 Logger Main Class,是我們進行日誌記錄時建立的物件,我們可以呼叫它的方法傳入日誌模板和資訊,來生成一條條日誌記錄,稱作 Log Record。使用方法:
import logging
# logging物件:產生日誌
logger = logging.getLogger('轉賬記錄')
2.Filter:篩選器
另外儲存日誌的時候我們可能不需要全部儲存,我們可能只需要儲存我們想要的部分就可以了,所以儲存前還需要進行一下過濾,留下我們想要的日誌,如只儲存某個級別的日誌,或只儲存包含某個關鍵字的日誌等,那麼這個過濾過程就交給 Filter 來完成。
3.Handler:處理器
處理器即用來處理日誌記錄的類,它可以將 Log Record 輸出到我們指定的日誌位置和儲存形式等,如我們可以指定將日誌通過 FTP 協議記錄到遠端的伺服器上,Handler 就會幫我們完成這些事情。並且handler自帶了基本的過濾操作。使用方法:
import logging # handler物件: 控制日誌的輸出位置(檔案,終端...) # 產品分類 hd1 = logging.FileHandler('a1.log',encoding='utf-8') # 輸出到檔案中 hd2 = logging.FileHandler('a2.log',encoding='utf-8') # 輸出到檔案中 hd3 = logging.StreamHandler() # 輸出到終端
4.Formatter:-格式化
實際上生成的 Log Record 也是一個個物件,那麼我們想要把它們儲存成一條條我們想要的日誌文字的話,就需要有一個格式化的過程,那麼這個過程就由 Formatter 來完成,返回的就是日誌字串,然後傳回給 Handler 來處理。使用方法:
import logging # format物件:控制日誌的格式 fm1 = logging.Formatter( fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', ) fm2 = logging.Formatter( fmt='%(asctime)s - %(name)s: %(message)s', datefmt='%Y-%m-%d', )
組成部分方法的使用
1.給logger物件繫結handler物件
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)
2.給handler繫結formmate物件
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1)
3.設定日誌等級
logger.setLevel(10) # debug
4.記錄日誌
logger.debug('好好學習,少犯錯!')
配置字典
一般配置字典我們都是直接複製提前寫好的主體,然後cv修改即可。主體程式碼:
import logging
import logging.config
# 定義日誌輸出格式 開始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name為getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 定義日誌輸出格式 結束
# 自定義檔案路徑
logfile_path = 'a3.log'
# log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # 過濾日誌
'handlers': {
#列印到終端的日誌
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 列印到螢幕
'formatter': 'simple'
},
#列印到檔案的日誌,收集info及以上的日誌
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 儲存到檔案
'formatter': 'standard',
'filename': logfile_path, # 日誌檔案
'maxBytes': 1024*1024*5, # 日誌大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日誌檔案的編碼,再也不用擔心中文log亂碼了
},
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 這裡把上面定義的兩個handler都加上,即log資料既寫入檔案又列印到螢幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)傳遞
}, # 當鍵不存在的情況下 (key設為空字串)預設都會使用該k:v配置
# '註冊記錄': {
# 'handlers': ['console'], # 這裡把上面定義的兩個handler都加上,即log資料既寫入檔案又列印到螢幕
# 'level': 'WARNING',
# 'propagate': True, # 向上(更高level的logger)傳遞
# }, # 當鍵不存在的情況下 (key設為空字串)預設都會使用該k:v配置
},
}
使用日誌字典配置
logging.config.dictConfig(LOGGING_DIC) # 自動載入字典中的配置
logger1 = logging.getLogger('閱覽記錄')
logger2 = logging.getLogger('點贊記錄')
logger1.debug('年輕人,晚上早點睡,少看點')
logger2.warning('喲,又來看了')
# loggers配置中使用空字串作為字典的鍵,相容性最好
配置字典在專案中的使用
日誌字典資料應該放在 settings.py檔案內,字典資料是日誌模組固定的配置,寫完一次之後幾乎都不需要動,它屬於配置檔案。並且配置檔案中變數名推薦全大寫。
def get_logger(msg):
# 記錄日誌
logging.config.dictConfig(settings.LOGGING_DIC) # 自動載入字典中的配置
logger1 = logging.getLogger(msg)
# logger1.debug(f'{username}註冊成功') # 這裡讓使用者自己寫更好
return logger1
第三方模組
第三方模組,是python強大的體現,而我們想要使用第三方模組,是需要安裝的。
常用的安裝方法:
1.通過pip安裝第三方模組
pip的路徑在python直譯器資料夾內的scripts目錄下,如果要在終端中直接使用pip目錄,需要新增環境變數,就是將scripts目錄地址新增到環境變數中。使用方法:執行--》cmd--》然後輸入:pip install 你要安裝的第三模組的名字。然後回車即可。這種方式下載預設最新版本。 pip工具預設是從國外的倉庫下載模組,速度會比較慢,可以修改國內映象倉庫。修改方式: pip install 模組名 -i 倉庫地址。命令列臨時修改地址。
國內的五個映象倉庫地址:1.阿里雲
(http://mirrors.aliyun.com/pypi/simple/) 2.豆瓣(http://pypi.douban.com/simple/) 3.清華大學(https://pypi.tuna.tsinghua.edu.cn/simple/) 4.中國科學技術大學(http://pypi.mirrors.ustc.edu.cn/simple/) 5.華中科技大學(http://pypi.hustunique.com/)
值得注意的是,如果在cmd終端中安裝的話,是直接在cmd黑屏終端這裡輸入,不需要進入Python環境...不需要進入Python環境...不需要進入Python環境。pip install 模組名==版本號。自定義下載版本號下載。
2.通過Pycharm的設定安裝第三方模組
使用方式:File(檔案)--》Settings(設定)--》Project:你的專案名字 --》Project Interpreter。點選 + 號,彈出對話方塊,你可以搜尋你需要安裝的三方模組。點選安裝等待就可以了。並且pycharm可以換源的。左下方點選manage repositoires管理地址即可。
3.通過安裝包等安裝第三方模組。
通過官網下載對應版本的安裝包。
在安裝第三方模組的時候可能會報錯。原因可能是當前計算機的網路不穩定,重新執行多次或者切換網路。或者是因為報錯資訊中沒有太多的關鍵字,並且很長,這時候拷貝最後一行錯誤資訊,去百度就可以了。
openpyxl模組
openpyxl模組如果沒有,就用上述方式安裝即可。
openpy常用方法
建立excel檔案
from openpyxl import Workbook
# 例項化
wb = Workbook()
wb1 = wb.create_sheet('學員名單') # 建立工作簿
wb2 = wb.create_sheet('繳費名單') # 建立工作簿
wb3 = wb.create_sheet('消費記錄') # 建立工作簿
wb4 = wb.create_sheet('瀏覽記錄', 0) # 還可以指定工作簿位置
wb1.title = '學員名單名稱修改'
wb.save('a.xlsx') # 儲存excel檔案
# 啟用 worksheet
ws = wb.active
開啟已有excel檔案
from openpyxl import load_workbook
wb2 = load_workbook('檔名稱.xlsx')
儲存資料
# 資料可以直接分配到單元格中(可以輸入公式)
ws['A1'] = 42
ws.cell(row=3, column=4, value=999)
# 可以附加行,從第一列開始附加(從最下方空白處,最左開始)(可以輸入多行)
ws.append([1, 2, 3])
# Python 型別會被自動轉換
ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")
# 寫公式資料(也可以在python程式碼中處理完畢以普通資料寫入)
ws['A6'] = '=sum(A4:A5)'
# 如何讀資料
from openpyxl import load_workbook
wb = load_workbook('1.xlsx',read_only=True,data_only=True)
print(wb.sheetnames) # 獲取1.xlsx中所有的工作薄名稱 結果是列表資料型別
wb1 = wb['test'] # 拿到工作薄test物件
# 第一種取值方式
print(wb1['A3'].value) # 不是結果 需要再點value
print(wb1['A6'].value) # 獲取用函式統計的資料,發生無法取到值
# 這種方式需要加一個引數
# 第二種取值方式
print(wb1.cell(row=3,column=4).value)
# 這種方式需要人為的先去修改一下程式產生的excel表格。
# 獲取一行行的資料
for row in wb1.rows: # 拿到每一行的資料
for data in row: # 拿到一行行資料裡面每一個單元格的資料
print(data.value)
# 獲取一列列的資料(如果想獲取 必須把readonly去掉)
for column in wb1.columns: # 拿到每一列的資料
for r in column: # 拿到一列列資料裡面每一個單元格的資料
print(r.value)
# 獲取最大的行數和列數
print(wb1.max_row)
print(wb1.max_column)