• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
武纪亨
博客园    首页    新随笔    联系   管理    订阅  订阅
python内置模块

内容概要

  • 取消转义
  • python内置模块之re
  • re实战之爬取红牛分公司数据
  • collections模块(python其他数据类型)
  • time与datetime模块
  • random模块(重点)
  • os与sys模块

内容详细

小练习

^[1-9]\d{13,16}[0-9x]$  # 以1-9位开头的+13位或16位的数字 以0-9或x结尾
^[1-9]\d{14}(\d{2}[0-9x])?$  # 以1-9开头+14位数字+2位数字+0-9的数字或x结尾
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$  # (以1-9开头+16位+1-9或x结尾)或1-9开头+14位数字结尾

取消转义

在原生的正则表达式中取消转义推荐\(每个\只能取消一个字符串的转义)
在python中取消转义推荐使用r'\n\a\t'(也可以使用\)

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)
# # print(res.group())  # j
# 避免报错 可以用if 判断
# if res:
#     print(res.group())
# else:
#     print('没有找到')
"""如果没有符合条件的诗句 search返回None 并且使用geoup会直接报错"""

# res = re.match('t','abac')  # 根据正则从头开始匹配(文本内容必须在开头匹配上)
# print(res)
# # print(res.group())
# if res:
#     print(res.group())
# else:
#     print('没有找到')
"""如果没有符合条件的数据 那么match返回None 并且使用group会直接报错"""

re模块其他方法

import re
# # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
# res = re.split('[ab]','abcd')
# print(res)  # ['', '', 'cd']

# 类似于字符串类型的replace方法
# res = re.sub('\d','H','eva3jason4yuan4',1)
# print(res)  # evaHjason4yuan4
#
# ret = re.sub('[a-z]','666','eva3jason4yuan4',1)
# print(ret)  # 666va3jason4yuan4

# 返回元组 并提示替换了几处
# res = re.subn('\d','A','aewe2fesewr3fgr2',1)
# print(res)  # ('aeweAfesewr3fgr2', 1)
# res = re.subn('\d','A','aewe2fesewr3fgr2',3)
# print(res)  # ('aeweAfesewrAfgrA', 3)

# '''常用'''
# regexp_obj = re.compile('\d+')
# res = regexp_obj.search('dsaasdwsadwqeqwr33214q3sdssf')
# print(res.group())
# res1 = regexp_obj.search('1234fsrfds45tgfd21')
# print(res1.group())

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


# res = re.search('^[1-9](\d{14})(\d{2}[0-9x])?$','110105199812067023')
# 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)  # ['110105199812067023']


# 有名分组
# res = re.search('^[1-9](?P<hhh>\d{14})(?P<vvv>\d{2}[0-9x])?$','110105199812067023')
# print(res)
# print(res.group())  # 110105199812067023
# print(res.group(1))  # 10105199812067
# print(res.group('vvv'))  # 023

正则实战案例

import re

# # 读取待匹配的数据
# with open(r'b.txt','r',encoding='utf8') as f:
#     data = f.read()
# # 利用正则匹配数据
# # 分公司名称
# title_list = re.findall("<h2>(.*?)</h2>",data)
# print(title_list)
# # 分公司地址
# addr_list = re.findall("<p class='mapIco'>(.*?)</p>",data)
# print(addr_list)
# # 分公司邮箱
# email_list = re.findall("<p class='mailIco'>(.*?)</p>",data)
# print(email_list)
# # 分公司电话
# phone_list = re.findall("<p class='telIco'>(.*?)</p></li>",data)
# print(phone_list)
# # 利用zip拉链 汇总信息
# res = zip(title_list,addr_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]))

collectinos模块

# 该模块提供了一些告诫的数据类型

1.namedtuple(具名元组)
	from collections import namedtuple
    
    """
    namedtuple('名称',[名字1,名字2,...])
    namedtuple('名称','名字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 = namedtuple('坐标','x,y,z')
    # res = point(11,22,33)
    # print(res)  # 坐标(x=11, y=22, z=33)
    # print(res.x)  # 11
    # print(res.y)  # 22
    # print(res.z)  # 33

    # card = namedtuple('扑克','花色 点数')
    # card1 = card('♦','8')
    # card2 = card('♣','9')
    # print(card1)  # 扑克(花色='♦', 点数='8')
    # print(card1.花色)  # ♦
    # print(card2.点数)  # 9

2.队列
	# 队列模块
    # import queue
# q = queue.Queue()
# q.put('first')
# q.put('sencond')
# q.put('third')
# # 从队列中获取元素
# print(q.get())
# print(q.get())  # first
# print(q.get())  # sencond
# print(q.get())  # third
3.双端队列
# from collections import deque
# q = deque([11,22,33])
# q.append(44)  # 从右边添加
# print(q)  # deque([11, 22, 33, 44])
# q.appendleft(55)  # 从左边添加
# print(q)  # deque([55, 11, 22, 33, 44])
# print(q.pop())  # 44  # 从右边取值
# print(q.popleft())  # 55  # 从左边取值
4.有序字典
# normal_dict = dict([('name','jason'),('pwd',123),('hobby','study')])
# print(normal_dict)  # {'name': 'jason', 'pwd': 123, 'hobby': 'study'}
# from collections import OrderedDict
# order_dict = OrderedDict([('name','jason'),('pwd',123),('hobby','study')])
# print(order_dict)  # OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
# 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:
#        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
"""
更多时间相关符号 保存到容易查找的位置即可
"""
# 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())

detetime模块

import datetime
# print(datetime.date.today())  # 2021-11-25
# print(datetime.datetime.today())  # 2021-11-25 20:35:46.546275
"""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 20:38:21.264666
# print(ctime - time_tel)  # 2021-11-22 20:38:21.264666
# print(ctime + time_tel)  # 2021-11-22 20:38:21.264666
"""
日期对象 = 日期对象 +/- 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 20:41:00.316521
# print(datetime.datetime.utcnow())  # 2021-11-25 20:41:00.316521

posted on 2021-11-25 20:38  Henrywuovo  阅读(47)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3