Python之旅.第三章.函數4.04

來源:互聯網
上載者:User

標籤:設定檔   lse   log   __file__   模板   byte   odi   strong   AC   


軟體開發目錄規範

路徑:用常量名,後面賦予路徑

常量路徑名=r‘路徑‘

 

常用目錄:(當前水平用這個目錄足夠了)

ATM:檔案夾,所需要做的項目名,用於存放項目相關所有檔案和檔案夾

readme:檔案,用於介紹程式功能

bin:檔案夾,只放開機檔案

start:檔案,開機檔案

conf:檔案夾,用於存放設定檔

settings:檔案名稱,設定檔

core:檔案夾,存放核心邏輯

src:檔案名稱,業務核心邏輯檔案

db:檔案夾,用於存放資料檔案

db:檔案名稱,用於存放資料

lib:檔案夾,用於存放常用工具,也就是模組檔案

common:檔案名稱,常用功能檔案,也就是常用模組檔案

log:檔案夾,用於存放檔案日誌

access.log:檔案名稱,記錄檔

 

應該把項目的根目錄添加到環境變數中;

就比如上方的ATM項目:

根目錄就是ATM目錄,以後需要調用什麼功能,在根目錄下都可以尋找到

 

取目錄:

os.path.dirname(__file__) :取當前檔案所在的目錄

os.path.dirname(os.path.dirname(__file__) ) :取當前所在在檔案目錄的上一級目錄

以此類推,取第幾層就寫幾段,後面有跟方便的方法,此方法僅供參考

然後把你需要的路徑,賦值到一個常量當中,當以後有需要調用的時候,直接調用常量名

不必輸入固定目錄,以限制程式

比如,sys.path.append(os.path.dirname(__file__) ):直接加入當前路徑

第二種方法:推薦

os.path.normpath(os.path.join(

     __file__,
     ‘..‘,
     ‘..‘
     ))

 

logging模組

debug:代表調試資訊,層級10

info:代表正常運行資訊,層級20

warning:代表警告資訊,層級30

errot:代表錯誤資訊,層級40

critical:代表崩潰資訊,層級50

設定成什麼層級,列印什麼層級資訊

 

logging模組模板

"""
logging配置
"""

#定義記錄檔路徑
#把日誌路徑賦予一個變數
LOG_PATH=r‘a3.log‘

# 定義三種日誌輸出格式 開始
#把自己定義的個數賦予一個變數用於後面的調用
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‘

id_simple_format = ‘[%(levelname)s][%(asctime)s] %(message)s‘


# log配置字典
LOGGING_DIC = {
‘version‘: 1,
‘disable_existing_loggers‘: False,
#多個日誌格式,不可更改
‘formatters‘: {
#日誌格式名,可更改,這名字的意思是往終端打
‘standard‘: {
#日誌格式:上方定義的格式的變數名
‘format‘: standard_format
},
#這個名字的意思是往檔案打
‘simple‘: {
‘format‘: simple_format
},
},
#過濾,沒什麼用,可以無視
‘filters‘: {},
#定義日誌輸出的格式:檔案或終端,不可更改
‘handlers‘: {
#列印到終端的日誌名,可以更改
‘console‘: {
#定義記錄層級,不可更改:記錄層級,可更改為DEBUG/INFO/WARNING/ERROT/CRITICAL
‘level‘: ‘DEBUG‘,
#定義日誌輸出格式,不可更改
‘class‘: ‘logging.StreamHandler‘, # 列印到螢幕
#綁定格式,不可更改:具體格式根據上方定義的格式更改
‘formatter‘: ‘simple‘
},
#列印到檔案的日誌,收集info及以上的日誌
‘default‘: {
‘level‘: ‘DEBUG‘,
‘class‘: ‘logging.handlers.RotatingFileHandler‘, # 儲存到檔案
‘formatter‘: ‘standard‘,
#日誌寫到哪個檔案:變數名,此變數我們在上面以賦予路徑
‘filename‘: LOG_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‘: False, # 向上(更高level的logger)傳遞
},
},
}

import logging
import logging.config

#載入上方定義的字典
def get_logger(name):
#讓logging模組從字典裡載入配置
logging.config.dictConfig(LOGGING_DIC) # 匯入上面定義的logging配置
#拿到logging名,因為上面logging名為空白,所以這裡用__name__,如果上方定義了實名,就用上方定義的實名
logger = logging.getLogger(name) # 產生一個log執行個體
return logger # 記錄該檔案的運行狀態
#用來測試是否在當前檔案執行
if __name__ == ‘__main__‘:
get_logger()

 

什麼是序列化:

我們把對象(變數)從記憶體中變成可儲存或可傳輸的過程叫做序列化;

為什麼要有序列化:

1.持久儲存狀態

2.跨平台資料互動

 

json模組

json只能處理字典,列表,字串,數字,bool,空類型

json內都是雙引號

序列化:記憶體中的資料結構——轉成一種中間格式(字串)——儲存到檔案中

關鍵字:json.dump()

用法:json.dump(需要序列化的值,開啟檔案的變數名)

還原序列化:檔案——讀取中間格式(字串)——轉成記憶體中的資料結構

只用W寫入模式

關鍵字:json.load

用法:json.load(開啟檔案的變數名)

 

pickle模組

pickle可以轉換所有的類型,但只能在python中使用

序列化:記憶體中的資料結構——轉成一種中間格式(字串)——儲存到檔案中

關鍵字:pickle.dump()

用法:pickle.dump(需要序列化的值,開啟檔案的變數名)

還原序列化:檔案——讀取中間格式(字串)——轉成記憶體中的資料結構

只用W寫入模式

關鍵字:pickle.load

用法:pickle.load(開啟檔案的變數名)

 

os模組

os.path.abspath(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.getsize(path)統計檔案大小,單位為位元組

os.path.join(‘a‘,‘b‘,‘c.txt‘) 將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略

不用寫路徑符

os.path.normpath(path) 正常化路徑,把裡面的斜杠同一,..(..返回上一層符號)執行等

用於取需要的絕對路徑:

Python之旅.第三章.函數4.04

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.