本文目录:

一、标准目录规范

之前用过的案例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模块...相关推荐

  1. python 创建文件_Python入学首次项目,新手必看,简单易操作

    继昨天文章python软件pycharm安装教程之后,今天则给新手小白们分享一哈,怎么制作并创建文件.print "hello world": 如后期需要资料文件的则可以私信留言, ...

  2. Maven多模块项目编译失败:程序包xxx不存在

    Maven多模块项目编译失败:程序包xxx不存在 项目结构如下: parent(父类工程) | - - - - - common(通用工具类子工程) | - - - - - projectA(spri ...

  3. python文件目录操作方法_Python常用的文件及文件路径、目录操作方法汇总介绍

    python的文件和路径操作函数基本上位于os和os.path模块中. os.listdir(dirname):列出dirname下的目录和文件 os.path.isdir(name):判断name是 ...

  4. python dcf估值_Python 常用模块

    本节内容 模块介绍 os 模块 sys 模块 time & datetime模块 random 模块 json & picle shutil 模块 shelve 模块 xml 模块 c ...

  5. python什么是入口文件_Python注释是什么东东

    注释 标注解释,目的是帮助读者理解的文本 也就是说,注释首先是文本,其二是说明,其三是思路,其四是例子 注释有两种形式 1. # ... 单行注释 用于对某句语句或语句块进行解释 放在语句块的头行或一 ...

  6. python遍历文件_python遍历目录文件脚本的示例

    例子 自己写的一个Python遍历文件脚本,对查到的文件进行特定的处理.没啥技术含量,但是也记录一下吧. 代码如下 复制代码 #!/usr/bin/python # -*- coding: utf-8 ...

  7. 如何用python创建文件_python在指定目录创建文件

    Python无法创建文件夹,如何制定创建目录?温柔也好,凶狠也罢.想有一个陌生的自己,给自己一些惊喜. /主目录/桌面/gnssIR_python-master:/usr/local/bin:/usr ...

  8. python字符串类库_Python 常用类库

    python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的libraries(modules)如下: 1 ...

  9. python打开文件_python如何学习

    1.Python 文件I/O 本章只讲述所有基本的 I/O 函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函 ...

  10. 列出5个python标准库_Python常用标准库使用(一)

    自学python一段时间,之前总是学习基本语法,对Python标准库没怎么接触,所以计划从常用的标准库开始,大体了解一遍,下面是学习过程中的笔记. 一.OS模块 主要对目录.或者文件操作.常用方法如下 ...

最新文章

  1. Tree-Structured LSTM模型
  2. 苹果降价背后的代工厂之殇
  3. 通俗易懂讲解JavaScript深拷贝和浅拷贝
  4. VTK:等参细胞演示用法实战
  5. opencv 检测 键盘_ubuntu+vscode 测试运行opencv
  6. 算法训练 K好数(dp+动态规划)
  7. 12个 Linux 中 grep 命令的超级用法实例
  8. AppDomainManager后门的实现思路
  9. TCP三次握手及四次挥手详解
  10. Elixir:可能成为下一代Web开发语言
  11. 软件测试—软件测试基础知识—测试用例设计的方法之等价类和边界值
  12. Android粒子爆炸特效[可用于任意控件]
  13. stm32f407 串口干扰采集_无线采集又添新伙伴,蓝牙无线采集来助力
  14. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_8_Lambda省略格式Lambda使用前...
  15. python超级简单爬虫
  16. 《四大文明古国》读书笔记思维导图,感受人类文明
  17. CCS 修改字体大小
  18. Java语言基础大合集
  19. android app程序闪退原因分析
  20. 基于WebGL架构的3D可视化平台—粮仓3D场景

热门文章

  1. 广东省汕头大学毕业设计论文撰写规范[2006]
  2. 前后端分离之JWT(JSON Web Token)的使用
  3. Go 语言的垃圾回收算法被吹过头?与Java比如何?
  4. Haskell生成数字的LED字符形式
  5. 自定义Inspector检视面板
  6. Lucene4:创建一个简单查询
  7. MYSQL 无重复插入数据更新语法 sql一句话使insert时若主键重复则更新
  8. js 阻止冒泡 在控件的 onxxx 事件中调用就可以阻止父控件也响应消息了
  9. 我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)...
  10. redismemcachedSQLNoSQL