本文目录:

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

  

python常用模块:项目目录规范、定制程序入口、自定义模块、引用变量、time和datetime模块的更多相关文章

  1. day 14 项目目录规范; time ; logging

    import   sys print(sys.modules) 程序一运行,解释器将里面的所有内容全部加载到内存 项目目录规范: 代码不可能全部只写在一个文件,十几万行代码,调整,修改都很不方便. 所 ...

  2. Javascript模块化编程(一)模块的写法最佳实践六、输入全局变量 独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互。 为了在模块内部调用全局变量,必须显式地将其他变量输入模块。

    Javascript模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块但是,Javascript不是一种模块化编程语言,它不支持类clas ...

  3. python 之 软件开发目录规范 、logging模块

    6.4 软件开发目录规范 软件(例如:ATM)目录应该包含: 文件名 存放 备注 bin start.py,用于起动程序   core src.py,程序核心功能代码   conf settings. ...

  4. python开发流程及项目目录规范

    # 项目开发流程 1.调研 2.需求分析   ---产品经理 3.任务分配   ---项目经理 4.写项目demo   ---项目经理.架构师.程序猿 5.架构分析   ---项目经理.架构师 6.编 ...

  5. Python代码项目目录规范v1.0

    程序目录规范:bin # 存放可执行程序 xxxx.py # 程序主程序(入口文件)config # 存放配置信息 settings.py # 全局配置文件(可能暂时未应用)db # 存放数据文件 c ...

  6. Java Web 项目目录规范

    一.项目结构 这里和其他项目区别不大,我将模板抽离出来,更容易分析和理解: 解释一下:js主要包括extends(引入第三方的js).module(项目模块自己的js).lib(引用包,这里也可以继续 ...

  7. Python开发【项目】:FTP程序

    作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...

  8. Java基础笔记(2) 程序入口 关键字 标识符 常量 变量

    提醒:关于那些和我一样新鸟来看资料的,能看懂多少看多少,看不懂的就是不重要,重要的你想我自己学习肯定要标注的,这些信息明白每个知识点实际作用就好了,其他的比如等会讲的常量内存,常量池这些都是我找的资料 ...

  9. python flask大型项目目录

    Hello World 作者背景 应用程序简介 要求 安装 Flask 在 Flask 中的 “Hello, World” 下一步? 模板 回顾 为什么我们需要模板 模板从天而降 模板中控制语句 模板 ...

随机推荐

  1. Minimum number of swaps required to sort an array

    https://www.hackerrank.com/challenges/minimum-swaps-2/problem Minimum Swaps II You are given an unor ...

  2. 整合AD RMS与EX 2010。

    1.点击开始菜单, 选择所有程 序,展开 Mi cros oft  Excha nge  Server  2010 ,打开Excha nge Ma na gement Cons ol e,选择收件人配 ...

  3. shell-变量,字符串,数组,注释,参数传递

    Linux的Shell有很多种,常见的有Bourne Shell Bourne Again Shell C Shell K Shell Shell for Root 等,其中Bourne Again ...

  4. CSS实现网页背景图片自适应全屏,自适应背景图片

    一张清晰漂亮的背景图片能给网页加分不少,设计师也经常会给页面的背景使用大图,我们既不想图片因为不同分辨率图片变形,也不希望当在大屏的情况下,背景有一块露白,简而言之,就是实现能自适应屏幕大小又不会变形 ...

  5. HA cluster

    ------------恢复内容开始------------ 集群分类: LB负载均衡集群(lvs/nginx(http/upstream, stream/upstream)),HA高可用集群,HP高 ...

  6. A Mixed Flash Translation Layer Structure for SLC-MLC Combined Flash Memory System

    http://blog.sina.com.cn/s/blog_502c8cc40100pztk.html 摘要 1.In this paper, we propose the SLC-MLC mixe ...

  7. Linux下nginx配置https协议访问的方法

    一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...

  8. Excel输入公式后只显示公式却不计算如何解决?

    在使用Excel函数公式的时候,您是否碰到过输入公式,按下Enter键之后,单元格仍只显示公式,而不显示计算结果.   工具/原料   Excel 教程以Excel2013为例 方法/步骤     教 ...

  9. 解决Win7上的连接access数据库的问题

    最近做了一个win桌面程序,没有用sql 数据库,而是用access数据库,因为access比sql用起来方便多了,最主要是不要安装sql server,直接放在程序里面,然后创建连接字符就可以了,s ...

  10. Centos删除多余的Linux内核

    删除开机多余kernel(centos) yum update 命令会大范围升级,有时候linux内核也会升级,升级后开机画面就会出现多个内核供你选择,所有强迫症的我需要删除旧的 ⒈查看正在使用的内核 ...