第一章バッグ
__Init__.pyファイルがある限り、パッケージがあるとフォルダが含まれています
我々は機能が完全に再利用我々はモジュールを使用する機能になりますするために、ファイルに書き込まれたときにモジュール全体を習得しなかったが、前に、モジュールはよりは、よりゆっくりと。我々はしたくなることを思い出してくださいパッケージの使用に、構造的なプログラムの保守性を改善することは統合管理モジュールになります
パッケージには、我々はそれを行うにはどのように袋を使用する複数のモジュールを、管理することができますか?
インポートを使用すると、XXインポートXXから
二つの方法
2.絶対パスをインポートします
from bake.api import www #推荐使用
www.fun()
3.相対パスを導入
from .. api.www import fun #zbb中
fun() #必须在最外层的同级进行导入
#执行
from bake.api.zbb import fun
第二章ロギングモジュール
機能シンプルな構成(ほとんどのスパム)
import logging
logging.debug('调试')
logging.info('信息')
logging.warning('警告')
logging.error('错误')
logging.critical('危险')
Pythonのロギングモジュールは、標準出力にデフォルトの印刷を記録し、警告のみにそのデフォルトを表す以上の警告レベルのログ、ログレベルを示します
、(レベルグレードCRITICAL> ERROR> WARNING> INFO> DEBUGのログ)
ログレベルのデフォルトのログフォーマット:ロガー名:ユーザー出力メッセージ。
柔軟な構成ログレベル、ログ形式、出力先:(ごみ)
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/tmp/test.log',
filemode='w')
basicConfig()関数は、デフォルトの動作パラメータが用意されていロギングモジュール固有のパラメータによって変更することができます。
- ファイル名:FiledHandlerを作成するには、そのようなログは、指定されたファイル名で指定したファイルに格納されています。
- ファイルモード:このパラメータは、ファイル名で指定され、デフォルト値「」も「W」として指定することができる、オープンファイル。
- 形式:ハンドラ指定した表示形式を記録します。
- datefmt:日付と時刻の形式を指定します。
- 設定するログレベル:レベル
- ストリーム:指定されたストリームをStreamHandlerの作成。あなたはへの出力を指定することができます
- sys.stderrを持ち、sys.stdoutのか、ファイル(F =オープン( 'test.log'、) 'W')、デフォルトのsys.stderrを持ち。両方のファイル名とストリームの2つのパラメータを一覧表示した場合は、ストリームのパラメータは無視されます。
formatパラメータ文字列の書式を使用することができます。
- %(名)■ロガー名
- %(Levelno)のログレベルデジタル形式
- %(Levelname)のログレベルのテキスト形式
- ログ出力機能モジュールのフルパス名に%(パス名)の呼び出しがないかもしれません
- %(ファイル名)のコールログ出力機能モジュールのファイル名
- %(モジュール)のコールログ出力機能モジュール名
- 関数名%(FUNCNAME)のコールログ出力機能
- OKコードステートメントの%(LINENO)Dログ出力関数の呼び出し場所
- 標準的な浮動小数点表現UNIX時間で表される現在時刻のF%(作成)
- ミリ秒ロガーの数は、場合D出力ログ情報%(relativeCreated)作成されてから
- 現在時刻文字列sの%(いるasctime)。デフォルトの形式は「2003-07-0816:49:45896」です。カンマの後のミリ秒
- %(スレッド)DスレッドID。ではないかもしれません
- %(のthreadName)■スレッド名。ではないかもしれません
- %(プロセス)DプロセスID。ではないかもしれません
- メッセージ%(メッセージ)のユーザ出力
Loggerオブジェクト構成(標準版)
import logging
logger = logging.getLogger()
# 创建一个logger
fh = logging.FileHandler('test.log',mode="a",encoding='utf-8') # 文件
ch = logging.StreamHandler() # 屏幕
formatter = logging.Formatter('%(asctime)s - %(name)s - %(filename)s - [line:%(lineno)d] - %(levelname)s - %(message)s')
# 将屏幕和文件都是用以上格式
logger.setLevel(logging.DEBUG)
# 设置记录级别
fh.setFormatter(formatter)
# 使用自定义的格式化内容
ch.setFormatter(formatter)
logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
logger.addHandler(ch) #打印在屏幕上
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')
import logging
dic = {"key":123}
logging.debug(dic)
num = 100
logging.info(f"用户当前余额:{num - 50}")
try:
num = int(input("请输入数字:"))
except Exception as e:
logging.warning("int将字符串转换报错了")
print("12334")
logging.error('我是错误')
logging.critical('我是危险')
アルティメット(退行しました)
import os
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 = '在 %(asctime)s %(message)s'
id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
# log文件的全路径
logfile_path = 'all2.log'
# log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
#打印到终端的日志
'stream': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': None, # 日志文件
'maxBytes': 1024*1024*1024, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['stream', 'file'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
},
}
def get_logger():
path = r'F:\s24\day21\liye.log'
LOGGING_DIC['handlers']['file']['filename'] = path
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(__name__) # 生成一个log实例
return logger
def save():
logger = get_logger()
logger.info(f'{} 存入300元') # 记录该文件的运行状态
save()