通常软件目录下有几个标准文件夹
软件主文件夹命名,通常都是大写(ATM_SHOPPING)
-------------------------------------------------------------------------
bin : 启动文件文件夹(整个软件的启动文件)
conf : 软件配置文件(软件全局性的一些变量和参数)
core :核心逻辑
db :专门放数据相关的文件(比如账号数据等)
lib :自定义的模块
log :日志文件
Readme.txt 软件介绍的文本
---------------------------------------------------------------------------
bin :start.py 启动文件
import sysimport os BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #就是取执行文件的绝对路径,然后获取执行文件的目录赋值给一个变量sys.path.append(BASE_DIR)from core import srcsrc.run()
PS:调用sys和os模块,os模块下有个path模块下有个dirname模块和abspath模块,用abspath获取绝对路径,dirname就是取执行文件的目录,有几层目录取几次dirname即可
PS:有一个内置的全局变量是__file__,是当前执行文件的绝对路径
PS:sys模块下有一个path模块,指的是环境变量,将变量放入环境变量即可调用所有模块
conf : setting.py 配置文件
import osBASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #动态获取路径,获取当前文件的绝对路径,然后获取执行文件的目录,有几层目录写几次log_path=r‘%s\log\transaction.log‘ %BASE_DIR #这里将日志文件的路径以动态方式放入log_path变量以供其他文件调用
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 timefrom 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补全,或者弹出提示
(三)
启动文件放在项目文件夹的根目录下,就无需处理环境变量,因为软件的根目录就是当前启动文件的文件夹(软件的环境变量都是以执行文件为准)
原文地址:https://www.cnblogs.com/shizhengquan/p/10017480.html