一,实现自定义包案例:
包含trans和work两个包
两个包都有同样的tools模块
包含 constants常量模块 模块中会引用常量模块提供的常量值
在测试模块中可以分别调用tools相关方法
目录结构图如下:test_module.py为测试模块
1,实现 根据输入的时间 得到一个唯一的ID值 功能:
a,建立trans包 在包内建立tools.py文件,写入功能逻辑,代码如下:
"""
根据输入的时间 得到一个唯一的ID值
"""
from datetime import datetime
import random
def date_trans_id(date=None):
#判断如果不输入日期,默认为当前时间
if date is None:
date = datetime.now()
#保证输出的字符串唯一性:日期+时间+随机数(暂定6位随机数)
return '{0}{1}'.format(date.strftime('%Y%m%d%H%M%S%f'),random.randint(200000,900000))
b,在nutils目录下建立test_module.py文件 为测试文件,引入包 写入测试代码:
from trans.tools import date_trans_id
from datetime import datetime
def test_trans_tool():
d1 = date_trans_id()
print(d1)
date = datetime(2020, 10, 20, 12, 50, 59)
d2 = date_trans_id(date)
print(d2)
if __name__ == '__main__':
test_trans_tool()
运行结果:
注意: if__name__=="__main__"的主要作用就是为了测试当前模块(A)的函数, 在if__name__=="__main__"下进行函数的调用。其他模块导入A模块时,不会执行A模块中调用函数的内容。
2,实现 根据文件的后缀名来判断文件的类型
a,建立work包 在包内建立tools.py文件,写入功能逻辑,代码如下:
"""
根据文件的后缀名来判断文件的类型
-1:代表未知或者其他文件类型
0:代表图片类型文件
1:代表word文件类型
2:代表excel文件类型
3:代表ppt文件类型
"""
import os.path
def get_file_type(file_name):
r = -1
if not os.path.isfile(file_name):
return r
file_name, ext = os.path.splitext(file_name) #os.path.splitext用来判断文件类型
e = ext.lower()#将文件后缀名统一成小写
if e in ('.jpg','.png','.gif'):
r = 0
elif e in ('.doc','.docx'):
r = 1
elif e in ('.xls','.xlsx'):
r = 2
elif e in ('.ppt','.pptx'):
r = 3
else:
r = -1
return r
b,在nutils目录下的test_module.py文件 为测试文件,引入包 写入测试代码:
from work.tools import get_file_type
def test_file_type():
d = get_file_type('C:\\Users\\Administrator\\Desktop\\ds.doc')
print(d)
if __name__ == '__main__':
test_file_type()
输出结果为:1 代表文件为word类型
如果想要修改图片类型代表的数字 在当前代码修改 ,如果只是一个地方引用修改较少,如果多方引用 修改起来会比较繁琐。需要修改多处; 可以通过建立常量 constents 模块(Python通过自定义实现常量,命名全部大写,值一旦绑定变不可修改)
代码如下:
把 constents.py文件引入到work包下的tools.py,修改后代码写法如下: