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 == "":
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模块的更多相关文章
- day 14 项目目录规范; time ; logging
import sys print(sys.modules) 程序一运行,解释器将里面的所有内容全部加载到内存 项目目录规范: 代码不可能全部只写在一个文件,十几万行代码,调整,修改都很不方便. 所 ...
- Javascript模块化编程(一)模块的写法最佳实践六、输入全局变量 独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互。 为了在模块内部调用全局变量,必须显式地将其他变量输入模块。
Javascript模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块但是,Javascript不是一种模块化编程语言,它不支持类clas ...
- python 之 软件开发目录规范 、logging模块
6.4 软件开发目录规范 软件(例如:ATM)目录应该包含: 文件名 存放 备注 bin start.py,用于起动程序 core src.py,程序核心功能代码 conf settings. ...
- python开发流程及项目目录规范
# 项目开发流程 1.调研 2.需求分析 ---产品经理 3.任务分配 ---项目经理 4.写项目demo ---项目经理.架构师.程序猿 5.架构分析 ---项目经理.架构师 6.编 ...
- Python代码项目目录规范v1.0
程序目录规范:bin # 存放可执行程序 xxxx.py # 程序主程序(入口文件)config # 存放配置信息 settings.py # 全局配置文件(可能暂时未应用)db # 存放数据文件 c ...
- Java Web 项目目录规范
一.项目结构 这里和其他项目区别不大,我将模板抽离出来,更容易分析和理解: 解释一下:js主要包括extends(引入第三方的js).module(项目模块自己的js).lib(引用包,这里也可以继续 ...
- Python开发【项目】:FTP程序
作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...
- Java基础笔记(2) 程序入口 关键字 标识符 常量 变量
提醒:关于那些和我一样新鸟来看资料的,能看懂多少看多少,看不懂的就是不重要,重要的你想我自己学习肯定要标注的,这些信息明白每个知识点实际作用就好了,其他的比如等会讲的常量内存,常量池这些都是我找的资料 ...
- python flask大型项目目录
Hello World 作者背景 应用程序简介 要求 安装 Flask 在 Flask 中的 “Hello, World” 下一步? 模板 回顾 为什么我们需要模板 模板从天而降 模板中控制语句 模板 ...
随机推荐
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- ubuntu14+ns2
https://www.linuxidc.com/Linux/2017-03/141504.htm 环境变量改为: export PATH=$PATH:/home/zgh/Desktop/ns-all ...
- Linux正则表达式题型
1.将下面的/etc/passwd所有行的第一列和最后一列相互调换位置. 解答: 1)使用sed的后向引用 2)awk -F ":" '{print $7":" ...
- 菜鸟系列Fabric——Fabric 私密数据(6)
Fabric 私密数据 1.私密数据的定义 如果某个渠道上的一组组织需要将数据与该渠道上的其他组织保密,他们可以选择创建一个仅包含需要访问数据的组织的新渠道.但是,在每种情况下创建单独的通道会产生额外 ...
- history 命令
history 命令用来显示执行过的命令,也可以根据显示的命令重新执行需要的命令. 用法: n 显示n个最近的记录 -a 添加记录到history文件中 -c 将目前shell中的所有history命 ...
- Stardew Valley(星露谷物语)Mod开发之路 1环境配置
首先来说明一下,我写这个章节本身也是对学习过程的记录,主要参考了http://canimod.com/guides/creating-a-smapi-mod中的内容.也推荐大家看看. *这些是我的开发 ...
- Elastic Search快速上手(1):简介及安装配置
前言 最近开始尝试学习Elastic Search,因此决定做一些简单的整理,以供后续参考,快速上手使用ES. 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多 ...
- 并不对劲的P5589
题目大意 有\(n\)(\(n\leq 10^9\))个数:\(1,2,...,n\),每次操作是随机取一个没被删除的数\(x\),并删去\(x,x^2,x^3,...\). 求期望几次删完所有数. ...
- 【IntelliJ IDEA】快捷键
1.System.out.println();的快捷方法 sout然后Alt+Enter或者直接点 2.idea上 重写父类方法的快捷键 Ctrl+O之后,在弹出的上面选择要重写的方法 3.idea ...
- 24-Perl 数据库连接
1.Perl 数据库连接本章节我们将为大家介绍 Perl 数据库的连接.Perl 5 中我们可以使用 DBI 模块来连接数据库.DBI 英文全称:Database Independent Interf ...