通常软件目录下有几个标准文件夹

软件主文件夹命名,通常都是大写(ATM_SHOPPING)

-------------------------------------------------------------------------

bin : 启动文件文件夹(整个软件的启动文件,也可直接写在根目录下省略这个文件夹)

conf : 软件配置文件(软件全局性的一些变量和参数)

core :用户层(就是一个功能的集合体文件,功能实现通过调用其他的模块)

db :数据层(数据处理动作模块,存储和调用,这个模块放lib文件夹内也可)

lib :接口模块文件夹(每一个功能的模块)

log :日志文件

Readme.txt 软件介绍的文本

---------------------------------------------------------------------------

bin :start.py  启动文件

import sys
import os BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #就是取执行文件的绝对路径,然后获取执行文件的目录赋值给一个变量
sys.path.append(BASE_DIR)
from core import src
src.run()

PS:调用sys和os模块,os模块下有个path模块下有个dirname模块和abspath模块,用abspath获取绝对路径,dirname就是取执行文件的目录,要让其他的模块能够获取这个模块内的数据,往前推几层能够到达项目根目录,那么取几次dirname即可

PS:有一个内置的全局变量是__file__,是当前执行文件的绝对路径

PS:sys模块下有一个path模块,指的是环境变量,将变量放入环境变量即可调用所有模块

conf : setting.py 配置文件

import os,logging
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #动态获取路径,获取当前文件的绝对路径,然后获取执行文件的目录,有几层目录写几次
file_path=r'%s\log\transaction.log' %BASE_DIR #这里将文件的路径以动态方式放入log_path变量以供其他文件调用
"""
logging配置 #日志管理模块,标准格式化写入日志文件
"""
logfile_path= r'%s\log\管理员日志.txt '%BASE_DIR
user_logfile_path = r'%s\user_log\用户日志.txt ' %BASE_DIR
standard_format = '%(asctime)s - %(threadName)s:%(thread)d - task_id:%(name)s - %(filename)s:%(lineno)d'\
'- %(levelname)s - %(message)s'
simple_format = '%(levelname)s - %(asctime)s - %(filename)s:%(lineno)d - %(message)s' LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'default': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'formatter': 'standard',
'filename': logfile_path,
'encoding': 'utf-8',
},
'user_log': {
'level': 'INFO',
'class': 'logging.FileHandler',
'formatter': 'simple',
'filename': user_logfile_path,
'encoding': 'utf-8',
},
},
'loggers': {
'用户日志': {
'handlers': ['user_log'],
'level': 'INFO',
},
'管理员日志': {
'handlers': ['default', 'console'],
'level': 'DEBUG',
},
},
}

core : src.py 核心代码 (主要的业务功能,就是一些主功能)

func_dic={
'1':login,
'2':register,
'3':shopping,
'4':transfer,
'5':pay
}
def run():
while True:
print("""
0 退出
1 登录
2 注册
3 购物
4 转账
5 支付
""") choice =input('请输入操作>>>: ').strip()
if choice == '0':break
if choice in func_dic:
func_dic[choice]()
else:
print('输出的指令不存在,请重新输入')

PS:就是一个首页的功能,软件相关功能所有的集合文件

db : 调用数据接口的模块

lib  : 自定义的模块

  项目中共用的功能,主功能需要调用的功能等模块

common.py(可以将日志模块和装饰器写这个文件内)

import time
from conf import settings #从conf文件夹内导入setting模块
def logger(msg):
with open(r'%s' %settings.log_path, 'at', encoding='utf-8') as f: #直接获取setting模块内的日志变量
f.write('%s %s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'),msg))

log : transaction.log(这个根据软件来命名,没有固定格式)

小常识:

(一)

日志功能需要调用时间模块

import time

写入时间功能:time.strftime('%y-%m-%d %H:%M:%S') #(这是固定格式)

(二)

项目文件夹放在顶级,建在顶级,就可以在导入模块的时候可以用tab补全,或者弹出提示

(三)

启动文件放在项目文件夹的根目录下,就无需处理环境变量,因为软件的根目录就是当前启动文件的文件夹(软件的环境变量都是以执行文件为准)

python学习之-软件开发的目录规范的更多相关文章

  1. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)

    一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...

  2. [软件开发的目录规范、区分py文件的两种用途]

    [软件开发的目录规范] 软件开发的目录规范 bin: 执行文件 conf: 存放配置文件相关代码 core: 存放源文件,业务逻辑相关代码 db: 存放数据库文件,主要用于与数据库交互 lib: 存放 ...

  3. Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型)

    Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型) 一丶软件开发规范 六个目录: #### 对某 ...

  4. Python 入门之 软件开发规范

    Python 入门之 软件开发规范 1.软件开发规范 -- 分文件 (1)为什么使用软件开发规范: 当几百行--大几万行代码存在于一个py文件中时存在的问题: 不便于管理 修改 可读性差 加载速度慢 ...

  5. 软件开的目录规范+sys,os,time模块

    —————————————————————————————————————————————————————————————————— start.py import sys,os # print(__ ...

  6. python学习day4软件目录结构规范

    为什么要设计好目录结构? 参考:http://www.cnblogs.com/alex3714/articles/5765046.html "设计项目目录结构",就和"代 ...

  7. python模块导入-软件开发目录规范-01

    模块 模块的基本概念 模块: # 一系列功能的结合体 模块的三种来源 """ 模块的三种来源 1.python解释器内置的模块(os.sys....) 2.第三方的别人写 ...

  8. 5.15 python 面向对象的软件开发&领域模型

    1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...

  9. 痞子衡嵌入式:知名半导体MCU大厂软件开发C代码规范

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是飞思卡尔软件开发C语言编码规范. 2020鼠年春节是个漫长的假期,痞子衡在家百无聊赖,翻出了2016年10月1日(这个时间是痞子衡正式开始 ...

随机推荐

  1. MyBatis3-基于注解的示例

    在基于注解的示例中,可以简化编写XML的过程,全部采用注解方式进行编写,并在注解上写SQL语句,语句和XML的语句保持一致,并且可以省略掉XML文件不用引入的好处.但还有一点,基于注解的方式还没有百分 ...

  2. Java选择结构和数组

    Java选择结构和数组 一.Switch语句 二.if和switch区别 推荐使用if 三.函数 Java中的函数和方法是同一个词 四.数组 4.1.数组常见错误 五.内存机制 六.转换成十六进制 移 ...

  3. js setInterval不能访问外网

    今天调用js setInterval,发现不能访问外网,或者说不能访问本身域名以外的其他域名..不知道什么原因,老是弹出: 网络延时,请稍后再试! setInterval(function(){ va ...

  4. 使用mothur进行OTU聚类

    微生物16S的OTU聚类工具有很多,最常用的就是 usearch.cdhit-OTU.mothur. 这些工具大多都是针对二代测序平台的,usearch的64bit版本是收费的. 如果要跑PacBio ...

  5. 20170716xlVba销售明细转销售单据

    Sub CreateSaleList() AppSettings On Error GoTo ErrHandler Dim StartTime As Variant '开始时间 Dim UsedTim ...

  6. 12月8日 周五 image_tag.

    Overview of helpers provided by Action View 6.1 AssetTagHelper:用于generate html语言 image_tag ,return a ...

  7. CentOS 7 Install Redis

    1. yum install epel-release 2. yum install –y redis 3. start : systemctl start redis.service 4. stat ...

  8. ns-3

    二.NS-3C++脚本的编写如前所述,NS-3的脚本使用C++语言(也支持python),使用四种类型的网络构件(Node.NetDevice.Channel.Application).一个简单的脚本 ...

  9. 关于floyd 打印路径的问题

    我们令    f[i][j]  表示从 i-->j的最短路上j前面的那个点. 显然初始化时  f[i][j]=i;  (这样的话先判断一下i是否能到达j好点) 更新条件时,当发现通过点k能使最短 ...

  10. POJ-1129 Channel Allocation (DFS)

    Description When a radio station is broadcasting over a very large area, repeaters are used to retra ...