1. 程式人生 > 其它 >今日學習內容總結2.3

今日學習內容總結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)