zoukankan      html  css  js  c++  java
  • python常用模块:项目目录规范、定制程序入口、自定义模块、引用变量、time和datetime模块

    本文目录:

    一、文件目录规范
    二、定制程序入口
    三、使用标准目录后
    四、常规函数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)

      

  • 相关阅读:
    Eclipse本地创建新的GIT分支,并推送至远程Git分支
    将持久态数据转化为游离态数据代码实现
    Java根据当前日期获得昨天的当前日期代码实现
    @RequestMapping和@GetMapping区别
    炫酷的banner.txt
    小程序colorUI框架初步使用教程
    Java Spring boot element ui activiti前后端分离,流程审批,权限管理框架
    Activiti (一)
    CSS Clip 裁剪
    @SpringBootApplication的使用
  • 原文地址:https://www.cnblogs.com/wuzhengzheng/p/9799290.html
Copyright © 2011-2022 走看看