本文目录:
一、文件目录规范
二、定制程序入口
三、使用标准目录后
四、常规函数time、datetime
一、标准目录规范
之前用过的案例atm机+购物商城代码过长,在学习了模块和包以后,我们应该分文件和文件夹
案例演示:编写ATM
#file:"start.py"
def login():
#加载文件
with open ("/users/jerry/pycharmprojects/项目结构/db/db.txt") as f:
print(f.read())
def register():
print(“注册)
def run():
while True:
print(
"""请选择
1.登录
2.注册
""")
s = input("请选择:")
if s == "":
login()
elif: s == "":
register()
else:
print("error")
1.在项目中我们经常用到文件路径例如数据和日志文件,不至一个地方要用,直接将路径写在代码中是不可取的,因为有可能会修改这些路径,所以不要直接写在代码中,要定义一个变量,修改的时候只需更改一次
#file:"start.py"
#数据路径
DB_PATH="/users/jerry/pycharmprojects/项目结构/db/db.txt"
#日志路径
LDG_PATH="/users/jerry/pycharmprojects/项目结构/db/log.txt"
def login():
#加载文件
with open("/users/jerry/pycharmprojects/项目结构/db/db.txt")as f:
print(f.read())
def register("注册")
print("注册")
def run():
while True:
print(
"""请选择
1.登录
2.注册
""")
s = input("请选择:")
if s == "":
login()
elif:
s == "":
register()
else:
print("error")
我们要将配置程序的变量和业务逻辑分开,所以我们要给配置信息单独建一个文件
#file:"setting.py
#数据路径
DB_PATH="/users/jerry/pycharmprojects/项目结构/db/db.txt"
#日志路径
LDG_PATH="/users/jerry/pycharmprojects/项目结构/db/log/log.txt"
2.接下来我们要做一个登录验证,由于每个功能都要用验证操作,所以我们为验证功能单独建一个文件
common.py
#登录验证装饰器
def login_auth():
pass
3.另外我们好要有日志log,数据文件db
4.再将程序的业务逻辑和启动代码进行分离,变成start文件和src文件
start.py专门执行启动
src.py中的业务逻辑被start调用
这样用户使用时就能清晰启动文件
5.在项目中可能会有多个执行文件,统一放在bin的文件夹下
最后一个规范的项目目录应包含以下结构:
bin
core
conf
lib
db
log
readme(介绍文件)
二、使用标准目录后
完善程序是可以展示用户功能界面,在src中定义run函数来启动程序,注意src所在的core中可能有多个文件,用户使用不方便,所以我们程序入口从src中转移到start.py中
#file:"start.py"
import core.src
core.src.run()
由于core这个模块中并不存在与环境变量中,所以程序无法运行!
所以要在环境变量中添加core
#file:"start.py"
import sys
sys.path.append(r"c:\\yyh\python\day20\atm\core")
import core.src
core.src.run()
1.程序运行成功,但是也写死了,因为lib和conf就无法使用,所以为了找到所有模块,我们要将ATM文件夹加入环境变量
#file:"start.py"
import sys
sys.path.append(r"c:\\yyh\python\day20\atm")
2.如果用户安装路径不同,程序也无法运行,此时我们需要动态获取当前项目的目录,在一个PY文件中可以使用file来获取当前文件路径,通过当前文件路径获取文件所在的目录,使用os.path.dirname
#file:"start.py"
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)
import core.src
core.src.run()
三.使用标准目录后
在上述文件中我们把文件路径定义变量放在setting.py文件中
那么在src中要使用这些变量 就需要导入conf下的setting.py
由于在启动文件start.py中我们已经将项目添加到path中,所以可以直接导入
#file:"src.py"部分代码
#导入配置文件
from comf import setting
def login():
#加载文件 使用配置文件中的路径
with open(setting.DB_PATH) as f:
print(f.read())
def register():
print("注册")
引入自定义模块
为上述案例添加日志功能
#file:"src.py"部分代码
#日志功能
def loggin(msg):
with open("/user/jerry/pycharmprojects/项目结构/log/log.txt") as f:
f.write(msg)
#导入配置文件
from conf import setting
def login():
#加载文件 使用配置文件中的路径
with open(setting.DB_PATH) as f:
print(f.read())
logger("xxx登录系统")
def register():
print("注册")
日志功能并不是只有src文件使用 所以我们将提取单独的模块
在lib下的common中
#file:"src.py"部分代码
#导入配置文件获取 日志路径
from conf import setting
#日志功能
def logger(msg):
with open(setting.LDG_PATH) as f:
f.write(msg)
在src中导入日志模块
#file:"src.py"部分代码
from lib import common
#日志功能
def logger(msg):
with open("/users/jerry/pycharmprojects/项目结构/log/log.txt") as f:
f.write(msg) #导入配置文件
from conf import srtting
def login():
#加载文件 使用配置文件中的路径
with open(setting.DB_path) as f:
print(f.read())
logger("xxx登录系统")
def register():
print("注册")
四、常用模块
1.time模块
import time
#与时间相关的一个模块 #时间的三类
#1.时间戳 从1970-1-1 0:0:0开始到现在的秒数
print(time.time())
t=time.time()
time.sleep(10)
t2=time.time()
print(t2-t) #2.结构化时间
print(time.localtime())#返回是一个对象,其中包含一个元组,里面是每个时间的值(东八区)
print(time.localtime().tm_year)#单独获取某个时间属性
print(time.gmtime())#世界统一时间 比北京时间晚八小时 #3.格式化的字符串时间
print(time.strftime("%Y-%m-%d %H:%M:%S %q"))
print(time.strftime("%Y-%m-%d %x %q")) #三种格式之间的相互转换
#时间戳转为结构化
# print(time.strftime(time.time())) #结构化转字符串
print(time.strftime("%Y-%m-%d",time.localtime(time.time()))) #字符串转结构化
print(time.striptime(time.strptime("2018-10-15","%Y-%m-%d")))
2.datetime 模块
import datetime #这是一个包,里面包含包对时间的处理,对日期的处理
datetime.date #日期相关
datetime.time #时间相关 #获取当前详细时间
print(datetime.datetime.now()) #获取时间的某一部分
t1 = (datetime.datetime.now().hour) #替换时间的某一部分
t1 = datetime.datetime.now()
t1 = t1.replace(year=2019)
print(t1) t2 = datetime.datetime.now()
#print(t1=t2) #了解知识点
#时间差对象
tal = datetime.timedelta(weeks=1) t1 = datetime.datetime.now()
print(t1 + tal)