python的内置模块(一)

python内置模块之re模块

  1、findall 、search、match

import re
# 根据正则匹配除所有符合条件的数据
re.findall('正则表达式','带匹配的文本')
res = re.findall('b','eva jason jackson')
print(res)  # ['a', 'a', 'a']  结果是一个列表(要么有元素 要么空列表)

# 根据正则匹配到一个符合条件的就结束
res = re.search('正则表达式','带匹配的文本')
res = re.search('a','eva jason jackson')
print(res)  # 结果对象
print(res.group())  # 正在的结果
if res:
    print(res.group())
else:
    print('不好意思 没有找到')
"""如果没有符合条件的数据 那么search返回None 并且使用group会直接报错,报错可以通过if判断的方式解决"""

# 根据正则从头开始匹配(文本内容必须在开头匹配上)
res = re.match('a','abac')
print(res)
print(res.group())
if res:
    print(res.group())
else:
    print('不好意思 没有找到')
"""如果没有符合条件的数据 那么match返回None 并且使用group会直接报错,报错可以通过if判断的方式解决"""

  2、split

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

  3、sub、subn

import re
# sub类似于字符串类型的replace方法
res = re.sub('\d','H','eva3jason4yuan4',1)  # 替换正则匹配到的内容
res = re.sub('\d','H','eva3jason4yuan4')  # 不写默认替换所有
print(res)  # evaHjason4yuan4

# subn 返回元组 并提示替换了几处
res = re.subn('\d','H','eva3jason4yuan4',1)
print(res)  # ('evaHjason4yuan4', 1)
res = re.subn('\d','H','eva3jason4yuan4')
print(res)  # ('evaHjasonHyuanH', 3)

  4、compile

# # 常用 类似于定义一个函数其他地方可以使用
import re
regexp_obj = re.compile('\d+')
res = regexp_obj.search('absd213j1hjj213jk')
res1 = regexp_obj.match('123hhkj2h1j3123')
res2 = regexp_obj.findall('1213k1j2jhj21j3123hh')
print(res,res1,res2)

  5、finditer

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

  6、分组

# search 
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
# 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-9x])?$','110105199812067023')
print(res)
print(res.group())  # 110105199812067023
print(res.group(1))  # 10105199812067  无名分组的取值方式(索引取)
print(res.group('xxx'))  # 10105199812067
print(res.group('ooo'))  # 023

python内置模块之collections模块

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

  1、nametuple(具名元组)

    格式   

namedtuple('名称',[名字1,名字2,...])
namedtuple('名称','名字1 名字2 ...')
from collections import namedtuple
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

  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、deque(双端队列)

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:
    if value>60:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)
my_dict['k3'].append(111)
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)

python内置模块之time模块

  1、时间三种表现形式

    时间戳(秒数)

    结构化时间(一般给机器看)

    格式化时间(一般给人看)

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

  2、时间戳

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

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

  3、格式化时间

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

   格式化时间字符

%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 当前时区的名称
%% %号本身

  4、结构化时间(struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

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)

   5、三者之间转换关系

python内置模块之datetime模块

import datetime
print(datetime.date.today())  # 2021-11-25
print(datetime.datetime.today())  # 2021-11-25 17:00:00.383893
"""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表示周一

  时间差

import datetime
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(days=3)
print(ctime)  # 2021-11-25 17:01:31.470390
# print(ctime - time_tel)  # 2021-11-22 17:01:31.470390
print(ctime + time_tel)  # 2021-11-28 17:02:00.575652
"""
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
"""
ret = ctime + time_tel
print(ret - ctime)  # 3 days, 0:00:00
print(ctime - ret)  # -3 days, 0:00:00

 

posted @ 2021-11-25 17:19  那就凑个整吧  阅读(79)  评论(0编辑  收藏  举报