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” 下一步? 模板 回顾 为什么我们需要模板 模板从天而降 模板中控制语句 模板 ...
随机推荐
- 三、使用VSCode配置简单的vue项目
由于最近要使用的项目框架为前后端分离的,采用的是vue.js+webAPI的形式进行开发的.因为之前我没有接触过vue.js,也只是通过视频文档做了一些简单的练习.今天技术主管说让大家熟悉下VSCod ...
- mysql数据库查找数据的方法。
今日内容 1.外键的变种 唯一索引:关键字 unique(num) 作用:使指定的列,中的属性不能重复,并且加速查找案例:create table t5(id int,num int,unique(n ...
- 【AMAD】django-cities -- 为Django项目提供国家,城市数据
动机 简介 个人评分 动机 有时候看一些数据库设计,国家数据会存在一个单独的表里面.这种方式读取数据库无疑又要加上一层join,很不划算. 简介 [django-cities]1可用为你提供国家和城市 ...
- json xml 传值方法
1.xml传值 xml传值的方式更加的安全. <id>1</id> <name>tom</name> 报文 2.JSON传值 JOSN的格式:3种 1. ...
- 深入理解JVM(二)JVM内存模型
一.前言 上文讲过了虚拟机的内存划分,即,我们将内存分为线程共享和线程私有. 线程共享的即java堆,和方法区.java堆大家可能都不会陌生:而方法区中包含了常量池,他也被称为永久代.通常方法区也会被 ...
- 关于Npoi+excel文件读取,修改文件内容的处理方式
因最近有需求场景,实现对文件的读写操作,又不单独生成新的文件,对于源文件的修改,做了一个简单实现,如下↓ // 要操作的excel文件路径 string fileName = Server.MapPa ...
- golang struct 转map 及 map[string]*Struct 初始化和遍历
package main import ( "encoding/json" "errors" "fmt" "reflect&quo ...
- Stream系列(十五)File方法使用
文件读写 视频讲解:https://www.bilibili.com/video/av78612785/ EmployeeTestCase.java package com.example.demo; ...
- PostgreSQL 循环导出schema的脚本
需要备份的schema列表 $ cat need_backup_schema.txt pipeline_na_16q3_v4 pipeline_na_16q4_v8 pipeline_na_16q4_ ...
- [官网] 一个很好的 search rpm 或者是deb 包的网站
https://pkgs.org Home About About pkgs.org - Packages Search The pkgs.org is created to provide you ...