模組的另一種形式 包 logging模組

2021-08-20 20:13:56 字數 3706 閱讀 8347

1.什麼是包

包是模組的一種形式,包的本質就是乙個含有__init__.py檔案的資料夾

2.為什麼要有包

3.如何用包

匯入包就是在導包下的__init__.py

import...

from...import...

主義的問題:

1.包內所有的檔案都是被匯入使用的,而不是被直接執行的

2.包內部模組之間的匯入可以使用絕對匯入(以包的根目錄為基準)與相對匯入(以當前 被匯入模組所在的目錄為基準)推薦使用相對匯入方式

3.當檔案是執行檔案時,無法在該檔案內使用相對匯入的語法

只有在檔案時被當作模組匯入時,該檔案內才能使用相對匯入的語法

4.凡是在匯入時帶點的,點的左邊都必須是乙個包

import aaa.bbb.m3.f3 # 錯誤:aaa、bbb為資料夾,而m3為py檔案(f3為執行函式)     

import aaa

# 首次匯入的模組發生三件事

# 1、建立乙個包的命名空間

# 2、執行包下的__init__.py檔案,將執行過程中產生的名字存放於包命名空間中

# (即包命名空間中存放的名字都是來自於__init__.py)

# 3、在當前執行檔案中拿到乙個名字aaa,aaa是指向包的命名空間的

# print(aaa.***)

# print(aaa.yyy)

# aaa.m1.f1()

# aaa.m2.f2()

# aaa.f1()

# aaa.f2()

# print(aaa.bbb)

# print(aaa.bbb.zzz)

# aaa.bbb.m3.f3()

# print(aaa.***)

# print(aaa.yyy)

# aaa.f1()

# aaa.f2()

# print(aaa.bbb)

# aaa.bbb.m3.f3()

import aaa

aaa.bbb.m3.f3()

import logging

# 進行基本的日誌配置

logging.basicconfig(filename='access.log',

ormat='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  

% (message)s',

datefmt='%y-%m-%d %h:%m:%s %p',

level=10,

stream=true

)

"""

logging配置

"""import os

import logging.config

# 定義三種日誌輸出格式 開始

standard_format = '%(asctime)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s'

******_format = '%(asctime)s - %(levelname)s - %(message)s'

id_******_format = '[%(asctime)s] %(message)s'

# log檔案的全路徑

logfile1_path = r'd:\sh_fullstack_s2\day17\a1.log'

logfile2_path = r'd:\sh_fullstack_s2\day17\a2.log'

# log配置字典

logging_dic = ,

'formatter2': ,

},'filters': {},

'handlers': ,

#列印到檔案的日誌,收集info及以上的日誌

'h1': ,

'h2': ,

},'loggers': ,},}

日誌級別遵循原則:自下而上進行匹配 #debug->info->warning->error->critical

logging.debug('除錯資訊') #10

logging.info('正常資訊') #20

logging.warning('不好啦著火啦') #30

logging.error('報錯資訊') #40

logging.critical('嚴重錯誤資訊') #50

問題:

1.沒有指定日誌級別

2.沒有指定日誌格式

3.只能往螢幕列印,沒有寫入檔案

新問題:

1.不能指定字串編碼

2.只能往檔案中列印

import logging

logging模組包含四種角色: logger,filter,formatter,handler

1.logger:負責產生日誌資訊

logger1=logging.getlogger('交易日誌')

logger2=logging.getlogger('使用者相關')

2.filter:負責篩選日誌

3.formatter:控制日誌輸出格式

formatter1=logging.formatter(

fmt='%(asctime)s:%(name)s:%(levelname)s:%(message)s',

datefmt='%y-%m-%d %x'

)formatter2=logging.formatter(

fmt='%(asctime)s:%(message)s',

datefmt='%y-%m-%d %x'

)4.handler:負責日誌輸出的目標

h1=logging.filehandler(filename='a1.log',encoding='utf-8')

h2=logging.filehandler(filename='a2.log',encoding='utf-8')

sm=logging.streamhandler()

5.繫結logger物件與handler物件

logger1.addhandler(h1)

logger1.addhandler(h2)

logger1.addhandler(sm)

6.繫結handler物件與formatter物件

h1.setformatter(formatter1)

h1.setformatter(formatter1)

h1.setformatter(formatter2)

7.設定日誌級別:可以在兩個關卡進行設定logger與handler

logger1.setlevel(10)

h1.setlevel(10)

h2.setlevel(10)

sm.setlevel(10)

logger1.info('egon借給李傑100w')

logging模組配圖

行列轉換的另一種形式

在實際做專案的時候遇到這樣乙個問題 資料庫表裡儲存了每個火車站每種型別的火車票銷售數量,但是有的火車站可能不銷售動車票或者高鐵票,最終的結果要如圖2所示,不銷售型別的火車票就空出來。本文採用master.dbo.spt values動態生成最大數目的列頭,然後採用case when實現每種型別的火車...

資訊共享的另一種形式 復用

共享的第一種形式是在不同人 不同部門 不同單位之間共享,這是大家經常理解的一種。而另一種共享形式大家可能不很注意,就是資料的縱向共享,歷史資料的使用也是一種共享。如果說前面的共享理解為廣度的共享,那麼後一種是深度共享。一次和搞工程設計專業的人聊天,說起原來非計算機畫圖時代,很辛苦,效率很低,而現在開...

另一種尊重

上中學的時候,有一節課印象非常深刻。老師問我們如果無意闖入乙個房間,發現房間裡有一位女士正在洗澡,這時應該怎麼辦?有同學回答就當什麼也沒看見,退出房間。還有同學回答 說聲對不起!女士。然後退出去。老師笑了笑說,還有更好的答案,那就是 對不起,先生!有一對結婚多年的夫妻,有一次出差在外的妻子有一件急事...