本文目录:
一、文件目录规范
二、定制程序入口
三、使用标准目录后
四、常规函数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 == "1": login() elif: s == "2": 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 == "1": login() elif: s == "2": 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:\yyhpythonday20atmcore") import core.src core.src.run()
1.程序运行成功,但是也写死了,因为lib和conf就无法使用,所以为了找到所有模块,我们要将ATM文件夹加入环境变量
#file:"start.py" import sys sys.path.append(r"c:\yyhpythonday20atm")
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)