博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day 14 项目目录规范; time ; logging
阅读量:4972 次
发布时间:2019-06-12

本文共 6581 字,大约阅读时间需要 21 分钟。

import   sys

print(sys.modules) 程序一运行,解释器将里面的所有内容全部加载到内存

项目目录规范:

  代码不可能全部只写在一个文件,十几万行代码,调整,修改都很不方便。

  所以要将代码规范化:

    目录规范化, 具体代码规范,PEP8规范等等

  目录规范化好处?

    1、项目结构清晰,便于查找

    2、对项目修改,易于调试

常用目录结构:

文件夹 \ 文件    作用

core \ src      主逻辑文件

lib \ commom     公共组件

bin \ starts     启动文件

conf \ settings     配置文件

log \ access.log     日志文件

db \           数据文件,账号密码,流水等

 

time,  datetime 模块 :

time模块给咱们提供的时间有三种形式:

第一种形式

time.time()  时间戳,从1970-01-01 00:00:00 距今时间,计算机用

第二种形式:格式化时间(人类使用)

2019/01/10 10:38  strftime()

print(time.time())   # 时间戳print(time.strftime('%Y/%m/%d'))     #  2019/01/08
ft = time.strftime("%y{}%m{}%d{} %I:%M:%S ".format('年', '月', '日')) 这样不行 ft = time.strftime("%y{}%m{}%d{} %I:%M:%S ").format('年', '月', '日')

格式化时间的多种用法

%y 两位数的年份表示(00-99)%Y 四位数的年份表示(000-9999)%m 月份(01-12)%d 月内中的一天(0-31)%H 24小时制小时数(0-23)%I 12小时制小时数(01-12)%M 分钟数(00=59)%S 秒(00-59)%a 本地简化星期名称%A 本地完整星期名称%b 本地简化的月份名称%B 本地完整的月份名称%c 本地相应的日期表示和时间表示%j 年内的一天(001-366)%p 本地A.M.或P.M.的等价符%U 一年中的星期数(00-53)星期天为星期的开始%w 星期(0-6),星期天为星期的开始%W 一年中的星期数(00-53)星期一为星期的开始%x 本地相应的日期表示%X 本地相应的时间表示%Z 当前时区的名称%% %号本身python中时间日期格式化符号:python中时间日期格式化符号
View Code

 

第三种形式:结构化时间以元组的形式存在

作为格式化时间与时间戳进行转换

struct_time = time.localtime()print(struct_time)# time.struct_time(tm_year=2019, tm_mon=1, tm_mday=8, tm_hour=20, # tm_min=39, tm_sec=53, tm_wday=1, tm_yday=8, tm_isdst=0)print(struct_time[0])  # 2019print(struct_time.tm_year)  # 2019

时间戳与结构化时间之间的转换:

 

# 格式化时间 ---->  结构化时间ft = time.strftime('%Y/%m/%d %H:%M:%S')st = time.strptime(ft,'%Y/%m/%d %H:%M:%S')print(st)# 结构化时间 ---> 时间戳t = time.mktime(st)print(t)# 时间戳 ----> 结构化时间t = time.time()st = time.localtime(t)print(st)# 结构化时间 ---> 格式化时间ft = time.strftime('%Y/%m/%d %H:%M:%S',st)print(ft)
View Code

 

计算时间差:

import timetrue_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S'))time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S'))dif_time=time_now-true_timestruct_time=time.gmtime(dif_time)print('过去了%d年%d月%d天%d小时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,                                       struct_time.tm_mday-1,struct_time.tm_hour,                                       struct_time.tm_min,struct_time.tm_sec))计算时间差
View Code

 

datetime模块

import datetimenow_time = datetime.datetime.now()print(now_time)  # 2019-01-08 20:46:59.857607# 只能调整的字段:weeks days hours minutes secondsprint(datetime.datetime.now() + datetime.timedelta(weeks=3)) # 三周后print(datetime.datetime.now() + datetime.timedelta(weeks=-3)) # 三周前print(datetime.datetime.now() + datetime.timedelta(days=-3)) # 三天前print(datetime.datetime.now() + datetime.timedelta(days=3)) # 三天后print(datetime.datetime.now() + datetime.timedelta(hours=5)) # 5小时后print(datetime.datetime.now() + datetime.timedelta(hours=-5)) # 5小时前print(datetime.datetime.now() + datetime.timedelta(minutes=-15)) # 15分钟前print(datetime.datetime.now() + datetime.timedelta(minutes=15)) # 15分钟后print(datetime.datetime.now() + datetime.timedelta(seconds=-70)) # 70秒前print(datetime.datetime.now() + datetime.timedelta(seconds=70)) # 70秒后current_time = datetime.datetime.now()# 可直接调整到指定的 年 月 日 时 分 秒 等print(current_time.replace(year=1977))  # 直接调整到1977年print(current_time.replace(month=1))  # 直接调整到1月份print(current_time.replace(year=1989,month=4,day=25))  # 1989-04-25 18:49:05.898601# 将时间戳转化成时间print(datetime.date.fromtimestamp(1232132131))  # 2009-01-17

 

 

日志:

开发中的日志:

1、日志帮助你调试代码

2、代码的警告,危险提示作用

3、你对服务器的操作命令

4、重要的节点,需要日志提示。

logging的,低,中,高,配

低配:

值打印到屏幕

低配v1
低配v2

 

中配

标配# 1.产生logger对象# logger = logging.getLogger()# # 2 产生其他对象(屏幕对象,文件对象)# sh = logging.StreamHandler()# fh1 = logging.FileHandler('staff.log', encoding='utf-8')# fh2 = logging.FileHandler('boss.log', encoding='utf-8')## # 3,设置显示格式# formater = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  # 执行设置显示格式# formater1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  # 执行设置显示格式# formater2 = logging.Formatter('%(asctime)s-%(message)s')  # 执行设置显示格式## # 4,给对象绑定格式# sh.setFormatter(formater)# fh1.setFormatter(formater1)# fh2.setFormatter(formater2)## # 5 给logger对象绑定其他对象# logger.addHandler(sh)# logger.addHandler(fh1)# logger.addHandler(fh2)## # 6 设置显示级别# # 其他对象的级别要高于logger的级别# logger.setLevel(40)# sh.setLevel(20)# fh1.setLevel(30)# fh2.setLevel(50)### logging.debug('debug message')  # 调试模式  10# logging.info('info message')  # 正常运转模式  20# logging.warning('warning message') # 警告模式  30# logging.error('error message')  # 错误模式  40# logging.critical('critical message')  #致命的 崩溃模式 50
标配

 

高配

import osimport 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'# boss版格式(lowb版)id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'# 定义日志输出格式 结束logfile_name = r'D:\python骑士计划3期\day14\log\staff.log'  # log文件名# log配置字典LOGGING_DIC = {    'version': 1,  # 版本    'disable_existing_loggers': False,  # 可否重复使用之前的logger对象    'formatters': {        'standard': {            'format': standard_format        },        'simple': {            'format': simple_format        },        'boss_formatter':{            'format': id_simple_format        },    },    'filters': {},    'handlers': {        #打印到终端的日志        'stream': {            'level': 'DEBUG',            'class': 'logging.StreamHandler',  # 打印到屏幕            'formatter': 'simple'        },        #打印到文件的日志,收集info及以上的日志  文件句柄        'file': {            'level': 20,            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件            'formatter': 'standard',  #标准            'filename': logfile_name,  # 日志文件            'maxBytes': 300,  # 日志大小 300 bit            'backupCount': 5,  #轮转文件数            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了        },    },    'loggers': {        #logging.getLogger(__name__)拿到的logger配置        '': {            'handlers': ['stream', 'file'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕            'level': 'DEBUG',  # 总级别            'propagate': True,  # 向上(更高level的logger)传递        },    },}# 字典中第一层的所有key都是固定不可变的。import logginglogging.config.dictConfig(LOGGING_DIC)logger = logging.getLogger()  # 这个logger对象是通过自己个性化配置的logger对象logger.info('运转正常')# def load_my_logging_cfg():#     logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置#     logger = logging.getLogger(__name__)  # 生成一个log实例#     logger.info('It works!')  # 记录该文件的运行状态## if __name__ == '__main__':#     load_my_logging_cfg()
高配

 

转载于:https://www.cnblogs.com/malimalihong95/p/10241465.html

你可能感兴趣的文章
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>
组件:slot插槽
查看>>
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
利用sed把一行的文本文件改成每句一行
查看>>
Android应用开发:核心技术解析与最佳实践pdf
查看>>
python——爬虫
查看>>
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
查看>>
求一个字符串中最长回文子串的长度(承接上一个题目)
查看>>
简单权限管理系统原理浅析
查看>>
springIOC第一个课堂案例的实现
查看>>
求输入成绩的平均分
查看>>
php PDO (转载)
查看>>
wordpress自动截取文章摘要代码
查看>>
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>
scanf和gets
查看>>
highcharts 图表实例
查看>>
ubuntu下如何查看用户登录及系统授权相关信息
查看>>