绝对导入和相对导入:
“”" ############################################## 只要涉及到模块的导入 那么sys.path永远以执行文件为准 ############################################## “”" 
绝对导入

相对导入
储备知识 .在路径中意思是当前路径 …在路径中意思是上一层路径 …/…在路径中意思是上上一层路径 相对导入可以不参考执行文件所在的路径 直接以当前模块文件路径为准 1.只能在模块文件中使用 不能在执行文件中使用 2.相对导入在项目比较复杂的情况下 可能会出错 ps:相对导入尽量少用 推荐使用绝对导入
包的概念
1.包的介绍
包就是一个含有__init__.py文件的文件夹
2.包的作用
内部存放多个py文件(模块文件) 仅仅是为了更加方便的管理模块文件
3.具体使用
import 包名
导入包名其实导入的是里面的__init__.py文件(该文件里面有什么你才能用什么)
其实也可以跨过__init__.py直接导入包里面的模块文件
“”" 针对python3解释器 其实文件夹里面有没有__init__.py已经无所谓了 都是包 但是针对Python2解释器 文件夹下面必须要有__init__.py才能被当做包 “”"
软件开发目录规范
1.bin文件夹
用于存储程序的启动文件 start.py
2.conf文件夹
用于存储程序的配置文件 settings.py
3.core文件夹
用于存储程序的核心逻辑 src.py
4.lib文件夹
用于存储程序的公共功能 common.py
5.db(database)文件夹
用于存储程序的数据文件 userinfo.txt
6.log文件夹
用于存储程序的日志文件 log.log
7.interface文件夹
用于存储程序的接口文件
8.readme文件(文本文件)
用于编写程序的说明,介绍,广告类似于产品说明书
9.requirements.txt
用于存储程序所需的第三方模块名称和版本

常见内置模块
1.collections模块
提供更多数据类型
1.1 namedtuple 具名元组
用法
Point = namedtuple('二维坐标系', ['x', 'y'])
res1 = Point(1, 3)
res2 = Point(10, 49)
print(res1, res2)
print(res1.x)
print(res1.y)
Point = namedtuple('三维坐标系', 'x y z')
res1 = Point(1, 3, 44)
res2 = Point(10, 49, 55)
print(res1, res2)
2.1 deque 队列
队列 :先进先出 堆栈 :后进先出 deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
from collections import deque
q = deque()
q.append(111)
q.append(222)
q.append(333)
q.append(444)
q.appendleft(555)
print(q)
deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。 3.1OrderedDict 有序字典 使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict:
from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od)
from collections import defaultdict
res = defaultdict(k1=[],k2=[])
print(res)
new_dict = {}
for i in res:
if i not in new_dict:
new_dict[i] = 1
else:
new_dict[i] += 1
print(new_dict)
from collections import Counter
res1 = Counter(res)
print(res1)
2.时间模块之time模块
时间的三种格式
1.时间戳 time.time()
通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

2.结构化时间 time.gmtime()

3.格式化时间 time.strftime()


几种格式之间的转换
import time
print(time.gmtime())
print(time.localtime())
>>>time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=13, tm_min=12, tm_sec=26, tm_wday=3, tm_yday=195, tm_isdst=0)
>>>time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=21, tm_min=12, tm_sec=26, tm_wday=3, tm_yday=195, tm_isdst=0)

|