python入口文件_python常用模块:项目目录规范、定制程序入口、自定义模块、引用变量、time和datetime模块...
本文目录:
一、标准目录规范
之前用过的案例atm机+购物商城代码过长,在学习了模块和包以后,我们应该分文件和文件夹
案例演示:编写ATM
#file:"start.py"
deflogin():#加载文件
with open ("/users/jerry/pycharmprojects/项目结构/db/db.txt") as f:print(f.read())defregister():print(“注册)defrun():whileTrue: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"
deflogin():#加载文件
with open("/users/jerry/pycharmprojects/项目结构/db/db.txt")as f:print(f.read())def register("注册")print("注册")defrun():whileTrue: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#登录验证装饰器
deflogin_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"
importcore.src
core.src.run()
由于core这个模块中并不存在与环境变量中,所以程序无法运行!
所以要在环境变量中添加core
#file:"start.py"
importsys
sys.path.append(r"c:\\yyh\python\day20\atm\core")importcore.src
core.src.run()
1.程序运行成功,但是也写死了,因为lib和conf就无法使用,所以为了找到所有模块,我们要将ATM文件夹加入环境变量
#file:"start.py"
importsys
sys.path.append(r"c:\\yyh\python\day20\atm")
2.如果用户安装路径不同,程序也无法运行,此时我们需要动态获取当前项目的目录,在一个PY文件中可以使用file来获取当前文件路径,通过当前文件路径获取文件所在的目录,使用os.path.dirname
#file:"start.py"
importsys,os
BASE_DIR= os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)importcore.src
core.src.run()
三.使用标准目录后
在上述文件中我们把文件路径定义变量放在setting.py文件中
那么在src中要使用这些变量 就需要导入conf下的setting.py
由于在启动文件start.py中我们已经将项目添加到path中,所以可以直接导入
#file:"src.py"部分代码#导入配置文件
from comf importsettingdeflogin():#加载文件 使用配置文件中的路径
with open(setting.DB_PATH) as f:print(f.read())defregister():print("注册")
引入自定义模块
为上述案例添加日志功能
#file:"src.py"部分代码#日志功能
defloggin(msg):
with open("/user/jerry/pycharmprojects/项目结构/log/log.txt") as f:
f.write(msg)#导入配置文件
from conf importsettingdeflogin():#加载文件 使用配置文件中的路径
with open(setting.DB_PATH) as f:print(f.read())
logger("xxx登录系统")defregister():print("注册")
日志功能并不是只有src文件使用 所以我们将提取单独的模块
在lib下的common中
#file:"src.py"部分代码#导入配置文件获取 日志路径
from conf importsetting#日志功能
deflogger(msg):
with open(setting.LDG_PATH) as f:
f.write(msg)
在src中导入日志模块
#file:"src.py"部分代码
from lib importcommon#日志功能
deflogger(msg):
with open("/users/jerry/pycharmprojects/项目结构/log/log.txt") as f:
f.write(msg)#导入配置文件
from conf importsrttingdeflogin():#加载文件 使用配置文件中的路径
with open(setting.DB_path) as f:print(f.read())
logger("xxx登录系统")defregister():print("注册")
四、常用模块
1.time模块
importtime#与时间相关的一个模块
#时间的三类#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 模块
importdatetime#这是一个包,里面包含包对时间的处理,对日期的处理
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入口文件_python常用模块:项目目录规范、定制程序入口、自定义模块、引用变量、time和datetime模块...相关推荐
- python 创建文件_Python入学首次项目,新手必看,简单易操作
继昨天文章python软件pycharm安装教程之后,今天则给新手小白们分享一哈,怎么制作并创建文件.print "hello world": 如后期需要资料文件的则可以私信留言, ...
- Maven多模块项目编译失败:程序包xxx不存在
Maven多模块项目编译失败:程序包xxx不存在 项目结构如下: parent(父类工程) | - - - - - common(通用工具类子工程) | - - - - - projectA(spri ...
- python文件目录操作方法_Python常用的文件及文件路径、目录操作方法汇总介绍
python的文件和路径操作函数基本上位于os和os.path模块中. os.listdir(dirname):列出dirname下的目录和文件 os.path.isdir(name):判断name是 ...
- python dcf估值_Python 常用模块
本节内容 模块介绍 os 模块 sys 模块 time & datetime模块 random 模块 json & picle shutil 模块 shelve 模块 xml 模块 c ...
- python什么是入口文件_Python注释是什么东东
注释 标注解释,目的是帮助读者理解的文本 也就是说,注释首先是文本,其二是说明,其三是思路,其四是例子 注释有两种形式 1. # ... 单行注释 用于对某句语句或语句块进行解释 放在语句块的头行或一 ...
- python遍历文件_python遍历目录文件脚本的示例
例子 自己写的一个Python遍历文件脚本,对查到的文件进行特定的处理.没啥技术含量,但是也记录一下吧. 代码如下 复制代码 #!/usr/bin/python # -*- coding: utf-8 ...
- 如何用python创建文件_python在指定目录创建文件
Python无法创建文件夹,如何制定创建目录?温柔也好,凶狠也罢.想有一个陌生的自己,给自己一些惊喜. /主目录/桌面/gnssIR_python-master:/usr/local/bin:/usr ...
- python字符串类库_Python 常用类库
python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的libraries(modules)如下: 1 ...
- python打开文件_python如何学习
1.Python 文件I/O 本章只讲述所有基本的 I/O 函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函 ...
- 列出5个python标准库_Python常用标准库使用(一)
自学python一段时间,之前总是学习基本语法,对Python标准库没怎么接触,所以计划从常用的标准库开始,大体了解一遍,下面是学习过程中的笔记. 一.OS模块 主要对目录.或者文件操作.常用方法如下 ...
最新文章
- Tree-Structured LSTM模型
- 苹果降价背后的代工厂之殇
- 通俗易懂讲解JavaScript深拷贝和浅拷贝
- VTK:等参细胞演示用法实战
- opencv 检测 键盘_ubuntu+vscode 测试运行opencv
- 算法训练 K好数(dp+动态规划)
- 12个 Linux 中 grep 命令的超级用法实例
- AppDomainManager后门的实现思路
- TCP三次握手及四次挥手详解
- Elixir:可能成为下一代Web开发语言
- 软件测试—软件测试基础知识—测试用例设计的方法之等价类和边界值
- Android粒子爆炸特效[可用于任意控件]
- stm32f407 串口干扰采集_无线采集又添新伙伴,蓝牙无线采集来助力
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_8_Lambda省略格式Lambda使用前...
- python超级简单爬虫
- 《四大文明古国》读书笔记思维导图,感受人类文明
- CCS 修改字体大小
- Java语言基础大合集
- android app程序闪退原因分析
- 基于WebGL架构的3D可视化平台—粮仓3D场景
热门文章
- 广东省汕头大学毕业设计论文撰写规范[2006]
- 前后端分离之JWT(JSON Web Token)的使用
- Go 语言的垃圾回收算法被吹过头?与Java比如何?
- Haskell生成数字的LED字符形式
- 自定义Inspector检视面板
- Lucene4:创建一个简单查询
- MYSQL 无重复插入数据更新语法 sql一句话使insert时若主键重复则更新
- js 阻止冒泡 在控件的 onxxx 事件中调用就可以阻止父控件也响应消息了
- 我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)...
- redismemcachedSQLNoSQL