1.模块
1.1为什么要有模块
- python其实有很多现成的方法,但是这些函数不能全都放在内存里
- 为用户节省很多不必要的内存消耗
- 用不到的功能就不用导入到内存里了
1.2模块是什么
- 一块python代码
- 一组python代码
- 一组C语言的代码
- 一堆写好的 现成可以用的 函数、类
- 以功能来分类的
1.3模块有哪几类
- 内置模块 —— 随着python解释器的安装直接可以使用的模块
- 扩展模块 —— 需要你自己安装一下才能使用的模块 django itchat
- 自定义模块 —— 用户根据自己的需求完成的一组功能
1.3.1内置模块
- os 操作系统
- sys模块
- time&datetime&date模块
1.4collection模块
- 使用模块必须先导入
- 已知的所有模块名都不可以作为python文件名
- 每一个模块都有一个大致的功能
- collections给我们提供了一些额外的数据类型
- str int list dict tuple set float 内置数据类型
- 每一个类都是一个数据类型 自定义数据类型
- collecctions模块是扩展我们数据类型的一个模块
例子:
import collections
Point = collections.namedtuple('point',['x','y'])
p = Point(1,2)
print(p)
print(p.x)
print(p.y)
1.5队列、栈
在存储数据的基础上 严格的维持了一个秩序,数据的进出顺序
- queue #队列 先进来的先出去 —— 售票
- 栈 #先进来的后出去 —— 计算机的计算、算法
例子:
import queue # 队列
q = queue.Queue()
l = list()
q.put(1) # 放
q.put(2) # 放
print(q.get()) # 1
print(q.get()) # 2
====================
import collections
dq = collections.deque()
dq.append(1)
dq.append(2)
print(dq)
print(dq.pop())
print(dq)
dq.appendleft(5)
print(dq.popleft())
print(dq)
1.6时间的几种表示格式
- unix时间戳时间
- 为什么要有时间戳时间 —— 计算机用的float
print(time.strftime('%Y')) # year
print(time.strftime('%m')) # month
print(time.strftime('%d')) # day
print(time.strftime('%H')) # hour
print(time.strftime('%M')) # Minute
print(time.strftime('%S')) # Second
print(time.strftime('%c')) # year
print(time.strftime('%m/%d/%Y %H:%M')) # year
- 时间戳时间float —— 给机器看的
- 结构化时间 —— 中间的过渡
- 格式化 %s —— 给人看的
1.7转换关系
import time
timestamp = time.time()
print(timestamp)
ts2 = 3000000000
print(time.localtime())
struct_time = time.localtime(ts2)
print(time.strftime('%m/%d/%Y %H:%M',struct_time))
struct_time = time.strptime('2020','%Y')
print(time.mktime(struct_time))
print(time.strptime('2020','%Y'))
1.8random模块
print(chr(65))
print(chr(97))
0-9 数字
65-90 大写字母
97-122 小写字母
例子:随机生成4位长度数字
def random_code(num,alpha=True):
import random
code = ''
for i in range(num):
choice = str(random.randint(0,9))
if alpha:
alpha_lower = chr(random.randint(65,90))
alpha_upper = chr(random.randint(97,122))
choice = random.choice([choice,alpha_lower,alpha_upper])
code += choice
return code
print(random_code(4,False))
1.9os模块
import os
print(os.getcwd())
print(file)
os.chdir(os.path.dirname(file))
print(os.getcwd())
- 所谓工作目录并不是当前文件所在的位置
- 而是执行代码的时候我的目录
1.10re模块
- 从一个巨大的字符串集合中,
- 根据规则来找到你想要的内容
- 或者判断某一段字符串是否是你规定的
- 字符组中常用的范围
数字 [0-9]
字母 [A-Za-z]
数字 [A-Za-z0-9]- [2-5]
-在字符组中有特殊的意义
如果你不希望它表示特殊意义,就用\进行转译
这样这个特殊的意义就被取消,它只表示它自己本身的意义
import re
ret = re.findall('\d+(\.\d+)?', 'eva45.65+346[55] egon 35yuan15')
print(ret)
ret = re.findall('(\d)5', 'eva4565346[5555] egon 35yuan15')
print(ret) # findall特性 匹配的时候按照规则匹配,显示只显示分组内的
ret = re.findall('\[(\d+)\]', 'eva4565346[555] egon 35yuan15')
print(ret) # 在分组的开始加上?:表示取消分组优先
1.10.1规则
?做量词 表示0次或1次
?在量词后 表示惰性匹配
?:在分组开头 表示取消分组优先
ret = re.search('(\d)5', 'eva4565346 egon 35yuan15')
print(ret)
if ret:
print(ret.group())
print(ret.group(0))
print(ret.group(1))
print(ret.group(2))
在search中没有正则规则的分组优先显示功能