Read the code version 2.0 log

Read a valid code file number, the number of lines of code, read time, write the log file, the log file print

1. Create setting.py

2. Create readcode.py

3.run

settings.py

import os
import logging.config

#log



# 定义三种日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]'  # 其中name为getLogger()指定的名字;lineno为调用日志输出函数的语句所在的代码行
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
# 定义日志输出格式 结束

logfile_dir = os.path.dirname(__file__)  # log文件的目录,需要自定义文件路径
print(logfile_dir)
logfile_dir = os.path.join(logfile_dir, 'log')  # C:\Users\oldboy\Desktop\atm\log

logfile_name = 'log.log'  # log文件名,需要自定义路径名

# 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir):  # C:\Users\oldboy\Desktop\atm\log
    os.mkdir(logfile_dir)

# log文件的全路径
logfile_path = os.path.join(logfile_dir, logfile_name)  # C:\Users\oldboy\Desktop\atm\log\log.log
# 定义日志路径 结束

# log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},  # filter可以不定义
    'handlers': {
        # 打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        # 打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'INFO',
            '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配置。如果''设置为固定值logger1,则下次导入必须设置成logging.getLogger('logger1')
        '': {
            # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'handlers': ['default', 'console'],
            'level': 'DEBUG',
            'propagate': False,  # 向上(更高level的logger)传递
        },
    },
}


def load_my_logging_cfg():
    logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
    logger = logging.getLogger(__name__)  # 生成一个log实例
    # logger.info('It works!')  # 记录该文件的运行状态

    return logger


if __name__ == '__main__':
    load_my_logging_cfg()

readcode.py

import os
import settings
import time
logger=settings.load_my_logging_cfg()

count=[0,0]
paths=[]
file_count=[0]
def sum_code(path):
    if os.path.isfile(path):
        one_file(path)
    else:
        paths=os.walk(path)
        for i in paths:
            for j in i[2]:
                path=i[0]+"\\"+j
                one_file(path)
def one_file(file_path):
    if file_path[-3:]==".py":
        file_count[0]+=1
        tag=True
        with open(file_path,"r",encoding="utf-8") as file:
            for line in file:
                if line.startswith("\'\'\'")or line.startswith('\"\"\"'):
                    tag=not tag
                    continue
                elif (not line.startswith("#") and  len(line)) and tag==True:
                    count[0]+=1
                    count[1]+=1
                else:
                    continue
        print(file_path+f" 文件代码:{count[1]},总代码{count[0]}")
        count[1]=0
sum_code(r"C:\Users\Administrator\Desktop\01python")
print("#"*200)
print(f"读取py文件一共:{file_count[0]}")
print(f"总代码量为:{count[0]}")
format_time = time.strftime("%Y-%m-%d %X")
logger.info(f"{format_time},代码量为{count[0]}文件数为{file_count[0]}")
time.sleep(1)
with open("log/log.log","r",encoding="utf8")as fr:

    data=fr.read()
    print(data)

Guess you like

Origin www.cnblogs.com/zx125/p/11420729.html