一、re模块
引入:
import re
注:永远不要起一个py文件的名字:这个名字和你已知的模块同名。
1、查找
findall:匹配所有,每一项都是列表中的一个元素
ret = re.findall('\d+', 'abc123efg456')
ret = re.findall("\d", "abc123def456")
search:只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法获取结果。
如果没有匹配到,会返回None,使用group会报错
ret = re.findall(
'\d+',
'abc123efg456')
print(ret)
# 内存地址,这是一个正则匹配的结果
print(ret.group())
# 通过ret.group()获取真正的结果
# if ret : # 内存地址,这是一个正则匹配的结果
# print(ret.group()) # 通过ret.group()获取真正的结果
match:从头开始匹配,相当于search中的正则表达式加上^(从首位开始)
2、替换、切割
split:切割
set = re.split(
'\d+',
'abc123efg456')
#正则表达式切割字符串
print(set)
sub:替换 替换正则 新的 原字符串 (替换次数)
s =
'abc123efg456'
ret = re.sub(
'\d+',
'H', s, 1
)
print(ret)
==>abcHefg456
subn:替换后返回一个元组,第二个元素为替换的次数
s =
'abc123efg456'
ret = re.subn(
'\d+',
'H', s)
print(ret)
==>(
'abcHefgH', 2)
3、re模块的时间复杂度和空间复杂度的处理
compile:节省使用正则表达式解决问题的时间
先将正则表达式进行编译,成为字节码保存,后面随时调用,不用多次编译。
ret = re.compile(
'\d+')
# 完成编译了
res = ret.findall(
'abc123efg456')
print(res)
res = ret.search(
'abc123efg456hig789', 8, 10)
# 定义了索引范围
print(res.group())
finditer:节省使用正则表达式解决问题的空间复杂度
返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值
ret = re.finditer(
'\d+',
'abc123efg456')
print(ret)
# 一个迭代器
for i
in ret:
print(i.group())
二、random模块
引入:
import random
- 取随机
整数:彩票 抽奖
random.
randint(n, m):取范围内的整数(顾头也顾尾),没有步长
random.
randrang(n, m, k):取范围内整数(顾头不顾尾),k为步长
print(random.randrange(1, 10, 2)) # 1-10之间的随机奇数
- 取随机
小数
random.
random(): 取0-1之间的小数
random.
uniform(n,m): 取范围n-m内的小数
print(random.uniform(1, 3))
- 从一个
列表中随机抽取值:抽奖
random.
choice(list):抽取一次,多次执行可能会抽取同样的值
random.
sample(list, n):从列表中随机抽取n个值,这些值不会重复
l = [
'a',
'b', (1, 2), 123
]
print(random.choice(l))
# 取值会重复
print(random.choice(l))
print(random.choice(l))
print(random.choice(l))
print(random.sample(l, 4))
# 第二个参数超过了列表长度就会报错
==>123
123
b
b
[123,
'b', (1, 2),
'a']
-
打乱一个列表的顺序:洗牌
random.
shuffle(list):改变原列表的顺序(可以节省空间)
l = [
'a',
'b', (1, 2), 123
]
random.shuffle(l) # 在源列表上进行操作
print(l)
四位数验证码:
s =
""
for i
in range(4
):
num = random.randint(0, 9
)
s +=
str(num)
print(s)
六位数验证码:
def code(n=6):
# 默认为六位
s =
""
for i
in range(n):
num = random.randint(0, 9
)
s +=
str(num)
return s
print(code())
数字加字符串验证码:
# 循环版
s =
""
for i
in range(4
):
# print(chr(65)) # 大写字母A
num = str(random.randint(0, 9
))
# 生成随机字母
alpha_upp = chr(random.randint(65, 90
))
alpha_low = chr(random.randint(97, 122
))
res = random.choice([num, alpha_low, alpha_upp])
# 随机抽取可重复列表元素
s +=
res
print(s)
# 函数版
def code(n=6
):
s =
""
for i
in range(n):
num = str(random.randint(0, 9
))
alpha_upp = chr(random.randint(65, 90
))
alpha_low = chr(random.randint(97, 122
))
res =
random.choice([num, alpha_low, alpha_upp])
s +=
res
return s
print(code(4
))
print(code())
# 进阶版 能够选择是否需要字母 默认6位
def code(n=6, alpha=
True):
s =
''
for i
in range(n):
num = str(random.randint(0, 9
))
if alpha:
alpha_upp = chr(random.randint(65, 90
))
alpha_low = chr(random.randint(97, 122
))
num =
random.choice([num, alpha_low, alpha_upp])
s +=
num
return s
print(code(4
, False))
print(code())
三、time模块
主要用来和时间打交道
引入:
import time
- 常用方法
time.sleep(secs)
(线程)推迟指定的时间运行,单位为秒。
表示时间的三种方式:
字符串数据类型:2018-8-20 格式化时间 —— 给人看的
结构化时间(元组):用来操作的的时间
浮点型数据类型:1534732946.449629 以s为单位 时间戳时间 —— 给计算机看的
1. 时间戳(timestamp)
时间戳表示的是从1970年1月1日00:00:00开始计算按秒计算的偏移量。
print(time.time())
# 获取当前时间戳1534765615.9471586
print(time.strftime(
'%Y-%m-%d %H:%M:%S'))
# 2018-08-20 19:48:23
2.格式化时间
- strftime()
print(time.strftime(
'%Y-%m-%d %H:%M:%S'))
# 2018-08-20 19:43:17
print(time.strftime(
'%c'))
# Mon Aug 20 19:43:17 2018 (国外了解)
python中时间日期格式化符号:%y 两位数的年份表示(00-99
)
%Y 四位数的年份表示(000-9999
)
%m 月份(01-12
)
%d 月内中的一天(0-31
)
%H 24小时制小时数(0-23
)
%I 12小时制小时数(01-12
)
%M 分钟数(00=59
)
%S 秒(00-59
)
%
a 本地简化星期名称
%
A 本地完整星期名称
%
b 本地简化的月份名称
%
B 本地完整的月份名称
%
c 本地相应的日期表示和时间表示
%j 年内的一天(001-366
)
%
p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53
)星期天为星期的开始
%w 星期(0-6
),星期天为星期的开始
%W 一年中的星期数(00-53
)星期一为星期的开始
%
x 本地相应的日期表示
%
X 本地相应的时间表示
%
Z 当前时区的名称
%% %
号本身
3.结构化时间:
- localtimetime()
print(time.localtime())
# 北京时间
==>time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=19, tm_min=51, tm_sec=5, tm_wday=0, tm_yday=232, tm_isdst=0)
struct_time元组:
共有九个元素:(年,月,日,时,分,秒,一年中的第几周,一年中的第几天等)
索引(Index)属性(Attribute)值(Values)0tm_year(年)比如20111tm_mon(月)1 - 122tm_mday(日)1 - 313tm_hour(时)0 - 234tm_min(分)0 - 595tm_sec(秒)0 - 606tm_wday(weekday)0 - 6(0表示周一)7tm_yday(一年中的第几天)1 - 3668tm_isdst(是否是夏令时)默认为0
4.时间格式互换
# time时间格式互换
# 格式化时间==>时间戳
fs = time.strftime(
'%Y-%m-%d %H:%M:%S')
st = time.strptime(fs,
'%Y-%m-%d %H:%M:%S')
ts =
time.mktime(st)
print(ts)
print(time.time())
# 时间戳==>格式化时间
ts =
time.time()
st =
time.localtime(ts)
fs = time.strftime(
'%Y-%m-%d %H:%M:%S', st)
print(fs)
print(time.strftime(
'%Y-%m-%d %H:%M:%S'))
# 计算时间差
def func(str_time1, str_time2):
struct_t1 = time.strptime(str_time1,
'%Y-%m-%d %H:%M:%S')
# 转化为结构化时间
struct_t2 = time.strptime(str_time2,
'%Y-%m-%d %H:%M:%S')
timestamp1 = time.mktime(struct_t1)
#转换为时间戳
timestamp2 =
time.mktime(struct_t2)
sub_time = timestamp2 - timestamp1
# 时间戳做减法
gm_time = time.gmtime(sub_time)
# 将时间戳转换为结构化时间
return print(
'过去了%d年%d月%d天%d小时%d分钟%d秒' %(gm_time.tm_year-1970, gm_time.tm_mon-1, gm_time.tm_mday-1, gm_time.tm_hour, gm_time.tm_min, gm_time.tm_sec))
# 减去时间戳元年得到结果
str_time1 =
'2018-8-19 12:00:00'
str_time2 = time.strftime(
'%Y-%m-%d %H:%M:%S')
# 获取当格式化时间
func(str_time1, str_time2)
三、sys模块:sys模块是和Python解释器打交道的
1 argv
sys.argv
转载于:https://www.cnblogs.com/jiumo/p/9503621.html