Atopos

导航

python内置模块

python内置模块

image

1.re模块基本操作方法

import re
from re import 名字

1.1 re.finfall('正则表达式','待匹配的文本') # 根据正则匹配所有符合条件的数据
eg 
  res = re.findall('a','eva jason jackson')
  print(res) # ['a','a','a']结果是一个列表 查找不到符合条件的数据 输出的结果是一个空列表[]


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

注意:如果没有符合条件的数据 那么search返回None 并且使用group会直接报错 这时可以使用if判断避免报错


1.3 re.match('正则表达式','待匹配的文本') # 根据正则从头开始匹配(文本内容必须在开头才能匹配上)
eg
  res = re.match('a','abca')
  print(res)
  print(res.group()) # a
  if res:
	 print(res.group())
  else:
	 print('不好意思没找到')

注意:如果没有符合条件的数据 那么match返回None 并且使用group会直接报错 这时可以使用if判断避免报错

image

2.re模块其他方法

2.1 re.split() 分割
eg
  res = re.split('[ab]','abcd')
  print(res) # [' ',' ','cd']
步骤描述:
# 先按'a'分割得到' '和'bcd'
# 再对' '和'bcd'分别按'b'分割

2.2 re.sub() 替换 类似于replace
eg
  res = re.sub('\d','o','ha2hhhha2hh',1) # 替换正则匹配到的内容
  res1 = re.sub('\d','o','ha2hhhha2hh') # 不写替换个数则默认替换所有正则匹配到内容
print(res) # haohhhha2hh
print(res1) # haohhhhaohh

2.3 re.subn() 替换完返回元组 并提示替换了几处
eg
  res = re.subn('\d','o','ha2hhhha2hh',1) # 替换正则匹配到的内容
  res1 = re.subn('\d','o','ha2hhhha2hh') # 不写替换个数则默认替换所有正则匹配到内容
print(res) # ('haohhhha2hh',1)
print(res1) # ('haohhhhaohh',2)

2.4 re.complie()
compile() 一般都是和findall() search() match() 搭配使用
eg
  flog = re.compile('\d+')
res = flog.findall('12abc13bcd') # 结果是一个列表
res1 = flog.search('12abcd1') # 结果可能是一个str or tuple or class 需要与group()一起使用
res2 = flog.match('1abcd') # 结果可能是一个str or tuple or class 需要与group()一起使用
print(res)# ['12','13']
print(res1.group()) # 12
print(res2.group()) # 1

2.5 re.finditer() # 根据正则匹配所有符合条件的数据 并把它们当作一个迭代器返回
eg
  res = re.finditer('\d+','abdc123bjfk12')
  print([i.group() for i in res]) # ['12312']

2.6 分组()
eg
  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

2.6.1无名分组
没有名字的组
findall针对分组优先展示
eg
  res = re.findall("^[1-9]\d{14}(\d{2}[0-9x])?$",'110105199812067023')
  print(res) # ['023']

取消分组优先展示 在分组里添加 ?: 例如(?:)
eg
  res1 = re.findall("^[1-9](?:\d{14})(?:\d{2}[0-9x])?$",'110105199812067023')
  print(res1)

2.6.2有名分组
给分组命名 在分组里添加?P<名字> 如(?P<xxx>)
eg
  res = re.findall("^[1-9](?P<ahhhh>\d{14})(\d{2}[0-9x])?$",'110105199812067023')
  print(res)
  print(res.group('ahhhh')) # 10105199812067
  print(res.group())  # 110105199812067023
  print(res.group(1))  # 10105199812067  无名分组的取值方式(索引取)

image

3.collections模块

该模块内部提供了一些高阶的数据类型
from collections import 名字

3.1.namedtuple(具名元组)
  from collections import namedtuple
namedtuple('名称',[名字,名字1,...])
namedtuple('名称','名字 名字 ...')

eg
  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

3.2队列 queue()
队列模块
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.3双端队列 deque()
from collections import deque
eg
  q = deque([11,22,33])
  q.append(44) # 从右边添加
  q.appendleft(55) # 从左边添加
  print(q.pop()) # 从右边取值
  print(q.popleft()) # 从左边取值

3.4有序字典 OrderdDict()
字典本是无序的 通过OrderDict可以转换成有序
from collections import OrderdDict
eg 在字典中添加新的内容
  normal_dict = dict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
    print(normal_dict)
      OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
  order_dict['xxx'] = 111

3.5默认值字典 defaultdict()
from collections import defaultdict
eg
  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)

3.6计数器 Counter()
from collections import counter
eg
  res = 'abcedfefs'
  ret = Counter(res)
  print(ret)

image

4.time模块

4.1时间三种表现形式

1.时间戳(秒数)
import time
time.sleep() # 原地阻塞指定的秒数
time.time() # 获取时间戳时间

2.结构化时间(一般给机器看的)
import time
time.locatime
eg
  print(time.localtime())
  res = time.localtime()
  print(res.tm_wday)
  print(res.tm_mon)
3.格式化时间(一般是给人看的)
import time
time.strtime
eg
  print(time.strftime('%Y-%m-%d')) # 2021-11-25
  print(time.strftime('%Y-%m-%H:%M:%S')) # 年-月-日-时-分-秒
  print(time.strftime('%Y-%m-%X')) # 年-月-日-时-分-秒


注意:这三种是可以互相转换的

image

5.datetime 模块

import datetime
eg
  print(datetime.date.today()) # 2021-11-25
  print(datetime.datetime.today()) # date年月日  datetime年月日时分秒  time时分秒

res = datetime.datetime.today()
print(res.year)
print(res.month)
print(res.day)
print(res.weekday())

时间差 timedelta
eg
  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

UTC时间与我们东八区时间差 八小时
ntime = datetime.datetime.now()
ctime = datetime.datetime.utcnow()
ctime = ntime-ctime

image

posted on 2021-11-25 20:27  Atopos_q  阅读(15)  评论(0编辑  收藏  举报