一. 目录规范.
1. 文件夹的规范写法:
bin (可执行文件)
conf (配置文件)
core (主要业务逻辑)
db (数据文件)
lib (库,(公共代码 第三方模块))
log (日志文件)
readme (说明文档. 也是一个文件)
在以上文件夹中 没有需要作为包的, 你的包通常放到 lib中, 但是注意 lib不应该作为包
疑惑?
这个文件夹到底应该是包还是文件夹, 其实问题就是需要不需要用到 init
init的作用就是导入包内模块中的全部功能
通过判断是不是需要这个功能来判断是包还是文件夹
2.定制程序的入口:
# 总结 程序的入口 主要是将项目的根目录添加到环境变量中.
3.分文件夹之后的模块使用
start.py (执行文件)
import sys,os
# sys.path.append(r"D:\上海python全栈4期\day19")
# __file__ 得到的是当前文件的完整路径
print(__file__)
# dirname 得到一个路径的所在目录
print(os.path.dirname(__file__))
# 我们要的是day19 所以再取一次
print(os.path.dirname(os.path.dirname(__file__)))
# 项目的根目录
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# 将得到的结果 添加到环境变量中
sys.path.append(BASE_DIR)
# 导入ATM
import core.ATM
# 执行启动函数
core.ATM.run()
settings.py文件 (里面存着一些变量,或工具)
DB_PATH = r"D:\上海python全栈4期\day19\db\高根db.txt"
LOG_PATH = r"D:\上海python全栈4期\day19\log\log.txt"
DB_URL = "127.0.0.1"
USER = "root"
PWD = "123"
ATM.py (主要的业务逻辑)
from conf.settings import *
from lib.common import *
def login():
print("登录")
name = "xx"
pwd = "xx"
with open(DB_PATH,encoding="utf-8") as f:
print(f.read())
logger("%s登录成功" % name)
def register():
print("注册")
with open(DB_PATH, encoding="utf-8") as f:
print(f.read())
def shopping():
print("购物")
if not login_auth():
return
with open(DB_PATH, encoding="utf-8") as f:
print(f.read())
def run():
print("欢迎使用!")
while True:
print("""1.登录
2.注册
3.购物""")
s = input("请选择:")
if s == "1":
login()
elif s == "2":
register()
elif s == "3":
shopping()
else:
print("输入错误!")
run()
common.py( 主要存储第三方模块.或公共代码)from conf.settings importdef login_auth():
print("登录验证")
def logger(msg):
with open(LOG_PATH,"at",encoding="utf-8") as f:
f.write(msg+"\n")
二. 常用的内置模块:
1. time
import time
#与时间相关的一个模块
#时间的三类:
# 1.时间戳 从1970年的一月一日 8:0:0 开始到现在的秒数
print(time.time())
t = time.time
time.sleep(10)
#让程序睡上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 %p(上午时间)'))
print(time.strftime('%Y-%m-%D %X(代表时分秒) %p'))
#4.三种格式之间的互相转换
#时间戳转为结构化
print(time.localtime(time.time()))
#结构化转字符串
print(time.strftime('%Y-%m-%d',time.localtime(time.time())))
#字符串转为结构化
print(time.strftime('2018-10-15','%Y-%m-%d'))
#结构化转时间戳
print(time.mktime(time.strftime('2018-10-15','%Y-%m-%d')))
#了解. 格林威治时间
print(time.asctime(time.localtime(60*60*24)))
print(time.ctime(60*60*24))
2. datetime
import datetime
#这个是一个包 里面包含 对时间的处理. 对日期的处理
datetime.date #日期相关
datetime.time #时间相关
# 获取当前详细时间
print(datetime.datetime.now())
# 获取时间的某一部分
print(datetime.datetime.now().hour)
#替换时间的某一部分
ti = datetime.datetime.now()
t1 = t1.replace(year=2019)
print(t1)
#了解 时间差对象
tal = datetime.datetime(weeks=1)
t1 = datetime.datetime.now()
print(t1 + tal)