python内置模块

内置re模块

在python要想使用正则表达式必须借助 模块,re就是其中之一

基本操作方法:import  re

re.findall('正则表达式','待匹配的文本')  # 根据正则匹配出所有符合条件的数据

res = re.findall('a','eva jason jackson')

print(res)  # ['a','a','a'] 结果就是一个列表(要么有元素,要么空列表) 


res = re.search('正则表达式','待匹配的文本') # 根据正则匹配到一个符合条件的就结束

res =re.search('a','eva jason jackson')

print(res) # 结果对象:<_sre.SRE_Match object;span=(2,3),match='a'>

print(res.group()) # 真正的结果 :a


"""如果不符合条件的数据,那么search返回None 并且使用group会直接报错"""

避免报错

if res:
    
    print(res.group())

else:
    
    print('没找到')




res = re,match('a','abca') # 根据正则从头开始匹配(文本内容必须在开头匹配上)

print(res)

print(res.group())

"""如果没有符合条件的数据 那么match返回None 并且使用group会直接报错"""

if res:
    
    print(res.group())

else:
    
    print('没找到')

re模块其他方法

import re

先按'a'分割得到''和'bcd'分别按'b'分割

res = re.splist('[ab]','abcd')

print(res) # ['','','cd']


类似字符串类型的replace方法

res = re.sub('\d','H','eva3jason4yuan4',1) #替换正则匹配到的内容

print(res)  # evaHjason4yuan4

res = re.sub('\d','H','eva3jason4yuan4')  # 不写默认替换所有

print(res)  # evaHjasonHyuanH


"""返回元组 并提示替换了几处"""

res = re.subn('\d','H','eva3jason4yuan4,1')

print(res) #('evaHjason4yuan4',1)

res = re.subn('\d','H','eva3jason4yuan4')

print(res) #('evaHjasonHyuanH',3)

"""常用"""

regexp_obj = re.compile('\d+')

res = regexp_obj.search('absd213j1hjj213jk')

res1 = regexp_obj.match('123hhkj2h1j3123')

res2 = regexp_obj.findall('1213k1j2jhj21j3123hh')

print(res,res1,res2)


"""常用"""
 
res = re.finditer('\d+','ashdklah21h23kj12jk3klj112312121kl131')
 
print([i.group() for i in res])

 res = re.search('^[1-9](\d{14})(\d{2}[0-9x])?$','110105199812067023')

 print(res)
 
print(res.group())  # 110105199812067023
 
print(res.group(1))  # 10105199812067
 
print(res.group(2))  # 023


'''常用'''
 
findall针对分组优先展示   无名分组
 
res = re.findall("^[1-9]\d{14}(\d{2}[0-9x])?$",'110105199812067023')
 
print(res)  # ['023']
 
取消分组优先展示          无名分组
 
res1 = re.findall("^[1-9](?:\d{14})(?:\d{2}[0-9x])?$",'110105199812067023')

 print(res1)


有名分组

res = re.search('^[1-9](?P<xxx>\d{14})(?P<ooo>\d{2}[0-9])?$','321322199001012672')

print(res)

print(res.group()) # 321322199001012672

print(res.group(1)) # 21322199001012 无名分组的取值方式(索引)

print(res.group('xxx')) # 21322199001012  指名道姓取

print(res.group('ooo')) # 672 指名道姓






正则实战案列

import re

# 读取带匹配的数据
with open(r'a.txt', 'r', encoding='utf8') as f:
    data = f.read()

# 利用正则匹配数据
# 分公司名称
title_list = re.findall('<h2>(.*?)</h2>', data)
# print(title_list)

# 分公司地址
address_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
# print(address_list)

# 分公司邮箱
email_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
# print(email_list)

# 分公司电话
phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)

res = zip(title_list, address_list, email_list, phone_list)
for data_tuple in res:
    print("""
    公司名称:%s
    公司地址:%s
    公司邮箱:%s
    公司电话:%s
    """ % (data_tuple[0], data_tuple[1], data_tuple[2], data_tuple[3]))

collections模块

# 该模块内部提供了一些高阶的数据类型

1、namedtuple(具名元组)

    from collections import namedtuple

"""
namedtuple('名称',[名字1,名字2,...])

nametuple('名称','名字1 名字2 ...')

"""

point = namedtuple('坐标',['x','y'])

res = point(11,22)

print(res) #坐标(x=11,y=22)

print(res.x) # 11

print(res.y) # 22


point = nametuple('坐标','x y z')

res = point(11,22,33)

print(res) # 坐标(x=11,y=22,z=33)

print(res.x)

print(res.y)

print(res.z)


card = nametuple('扑克','花色 点数')

card1 = card('♠','A')

card2 = card('♥','K')

print(card1)

print(card1.花色)

print(card1.点数)


2、队列

# 队列模块

import queue  # 内置队列模块:FIFO
     
# 初始化队列
     
q = queue.Queue()
    
# 往队列中添加元素
   
q.put('first')
    
q.put('second')
    
q.put('third')
    
# 从队列中获取元素
   
print(q.get())
   
print(q.get())
    
print(q.get())
    
print(q.get())  # 值取没了就会原地等待
 
3.双端队列
    
from collections import deque
    
q = deque([11,22,33])
    
q.append(44)  # 从右边添加
   
q.appendleft(55)  # 从左边添加
    
print(q.pop())  # 从右边取值
   
print(q.popleft())  # 从做边取值

4、有序字典

normal_dict = dict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
   
print(normal_dict)
    
{'hobby': 'study', 'pwd': 123, 'name': 'jason'}
    
from collections import OrderedDict
    
order_dict = OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
    
print(order_dict)
    
OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
    
order_dict['xxx'] = 111
    
order_dict
    
OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study'), ('xxx', 111)])
    
normal_dict['yyy'] = 222
    
normal_dict

{'hobby': 'study', 'pwd': 123, 'yyy': 222, 'name': 'jason'}


 5.默认值字典
	
from collections import defaultdict
    
values = [11, 22, 33,44,55,66,77,88,99,90]
    
my_dict = defaultdict(list)
    
for value in  values:
        i
    if value>60:
            
        my_dict['k1'].append(value)
        
    else:
            
        my_dict['k2'].append(value)
    
     print(my_dict)



6.计数器
	
res = 'abcdeabcdabcaba'
     
统计字符串中每个元素出现的次数
     
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  # 计数器
    
ret = Counter(res)
    
print(ret)

time模块

"""
时间三种表现形式

    1、时间戳(秒数)

    2、结构化时间(一般是给机器看的)

    3、格式化时间(一般是给人看的)

    三种时间是可以相互转换的!

"""


1、time.sleep() 原地阻塞指定的秒数

2、time.time()   获取时间戳时间


格式化时间

import time

print(time.strftime('%Y-%m-%d'))      # 2021-11-25
            
            # 时间单位:年-月-日

print(time.strftime('%Y-%m-%d %H:%M:%S'))    # 2021-11-25 11:48:34
        
         # 时间单位: 年-月-日  时-分-秒

print(time.strftime('%Y-%m-%d %X'))     # 2021-11-25 11:48:34
   
     # 时间单位:年-月-日  (%X:时-分-秒)


"""
更多时间相关符号 保存到容易查找的位置即可

"""

 print(time.localtime())
 
time.struct_time(
 
tm_year=2021,
 
tm_mon=11,
 
tm_mday=25,
 
tm_hour=11,

 
tm_min=51,
 
tm_sec=25,
 
tm_wday=3,
 
tm_yday=329,
 
tm_isdst=0)


print(time.time())

print(time.gmtime(11111111111))
 
print(time.localtime())


datetime模块

import time

print(datetime.date.today()) # 2021-11-25

print(datetime.datetime.today) # 2021-11-25 12:25:11.969969

"""date年月日  datetime年月日时分秒  time时分秒(MySQL django后期可以)"""

res = datetime.datetime.today()
 
print(res.year)  # 2021
 
print(res.month)  # 11
 
print(res.day)  # 25
 
print(res.weekday())  # 获取星期(weekday星期是0-6) 0表示周一
 
print(res.isoweekday())  # 获取星期(weekday星期是1-7) 1表示周一

"""时间差(timedelta)"""
 
ctime = datetime.datetime.today()
 
time_tel = datetime.timedelta(days=3)
 
print(ctime)  # 2021-11-25 12:20:48.570489
 
print(ctime - time_tel)  # 2021-11-22 12:21:06.712396
 
print(ctime + time_tel)  # 2021-11-28 12:21:06.712396

"""

日期对象 = 日期对象 +/- timedelta对象

timedelta对象 = 日期对象 +/- 日期对象

"""
 
ret = ctime + time_tel
 
print(ret - ctime)  # 3 days, 0:00:00
 
print(ctime - ret)  # -3 days, 0:00:00


 小练习 计算举例今年过生日还有多少天
 
birthday = datetime.date(2000, 11, 11)
 
now_date = datetime.date.today()
 
days = birthday - now_date
 
print('距离生日还有{}天'.format(days))

 
UTC时间与我们的东八区时间差 八个小时
 
print(datetime.datetime.now())  # 2021-11-25 12:25:33.579310
 
print(datetime.datetime.utcnow())  # 2021-11-25 04:25:33.579310


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万元系数

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值