内容概要

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

取消转义

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

python内置模块之re模块

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

import re

re.findall('正则表达式', '要匹配的文件')
print(re.findall('b', 'rain brand about'))  # 结果是一个列表(有元素或空列表)

python 字符串变量取消转义 python去掉转义字符_python

import re

re.search('正则表达式', '要匹配的文件')
print(re.search('a', 'name rain hobby').group())  # 如果没有符合的条件search会返回None,然后group会报错
# search找到第一个就会结束

python 字符串变量取消转义 python去掉转义字符_python_02

python 字符串变量取消转义 python去掉转义字符_转义_03

import re

print(re.match('c', 'count code cool').group())  # 如果没有符合的条件match会返回None,然后group会报错
# match从头到位开始匹配(文件内容必须开头匹配上)

python 字符串变量取消转义 python去掉转义字符_正则表达式_04

python 字符串变量取消转义 python去掉转义字符_正则表达式_05

re模块其他方法

import re

print(re.split('[ab]', 'abc'))
# 先从a分割得到''和'bc',在对''和'bc'从b分割

python 字符串变量取消转义 python去掉转义字符_转义_06

import re

print(re.sub('\d', 'A', 'sss5ert3li4nj6dc7', 2))
# 类似于字符串类型的replace方法,2是替换的个数,不填默认全部替换

python 字符串变量取消转义 python去掉转义字符_正则表达式_07

import re

print(re.subn('\d', 'A', 'sss5ert3li4nj6dc7', 2))
# 返回元组,并提示替换几次

python 字符串变量取消转义 python去掉转义字符_转义_08

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)

python 字符串变量取消转义 python去掉转义字符_正则表达式_09

import re

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())
print(res.group(1))
print(res.group(2))

python 字符串变量取消转义 python去掉转义字符_转义_10

无名分组
import re

# 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

python 字符串变量取消转义 python去掉转义字符_python 字符串变量取消转义_11

有名分组
import re

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 字符串变量取消转义 python去掉转义字符_转义_12

正则实战案例

爬取红牛分公司数据
import re

with open(r'a.txt', 'r', encoding='utf8') as f:  # 读取要匹配的数据
    a = f.read()
title_list = re.findall('<h2>(.*?)</h2>', a)  # 分公司名字
address_list = re.findall("<p class='mapIco'>(.*?)</p>", a)  # 分公司地址
email_list = re.findall("<p class='mailIco'>(.*?)</p>", a)  # 分公司邮箱
phone_list = re.findall("<p class='telIco'>(.*?)</p>", a)  # 分公司电话
res = zip(title_list, address_list, email_list, phone_list)
for a1 in res:
    print('''
             公司名字: %s
             公司地址: %s
             公司邮箱: %s
             公司电话: %s
                        ''' % (a1[0], a1[1], a1[2], a1[3]))

python 字符串变量取消转义 python去掉转义字符_转义_13

collections模块

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

1.namedtuple(具名元组)
from collections import namedtuple
...
from collections import namedtuple
a = namedtuple('坐标', 'x y z')
res = a(1, 2, 3)
for i in res:
    print(i)  # x=1,y=2,x=3

python 字符串变量取消转义 python去掉转义字符_正则表达式_14

from collections import namedtuple
b = namedtuple('扑克', '花色 点数')
s1 = b('♠', 'A')
S2 = b('♥', 'Q')
print(s1.花色)
print(s1.点数)

python 字符串变量取消转义 python去掉转义字符_正则表达式_15

2.队列
import queue
q = queue.Queue()
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get())
# print(q.get()) 值没有会原地等待

python 字符串变量取消转义 python去掉转义字符_正则表达式_16

3.双端队列
from collections import deque

l = deque([1, 2, 3])
l.append(4)  # 从右边加值
l.appendleft(5)  # 从左边加值
print(l)
print(l.pop())  # 从后面取值
print(l.popleft())  # 从前面取值
print(l)

python 字符串变量取消转义 python去掉转义字符_正则表达式_17

4.有序字典
from collections import OrderedDict

dic = OrderedDict([('name', 'sss'), ('age', 18), ('hobby', 'music')])
print(dic)
dic['qqq'] = 333
print(dic)

python 字符串变量取消转义 python去掉转义字符_正则表达式_18

5.默认值字典
from collections import defaultdict
l = [10, 30, 50, 70, 90, 110]
dic = defaultdict(list)
for i in l:
    if i > 60:
        dic['k1'].append(i)
    else:
        dic['k2'].append(i)
print(dic)

python 字符串变量取消转义 python去掉转义字符_转义_19

6.计数器
from collections import Counter

s = 'ahdahabfjkashcauia'
print(Counter(s))

python 字符串变量取消转义 python去掉转义字符_正则表达式_20

time模块

时间三种表现形式
   1.时间戳(秒数)
   2.结构化时间(一般给机器看)
   3.格式化时间(一般给人看)
   三种时间是可以相互转换的

time.sleep()   原地阻塞指定的描述
time.time()    获取时间戳

格式化时间
import time

print(time.strftime('%y-%m-%d'))
print(time.strftime('%y-%m-%d %X'))

python 字符串变量取消转义 python去掉转义字符_正则表达式_21

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

python 字符串变量取消转义 python去掉转义字符_正则表达式_22

datetime模块

计算某年某月某日某时某分某秒
import datetime

print(datetime.date.today())
print(datetime.datetime.today())

python 字符串变量取消转义 python去掉转义字符_正则表达式_23

import datetime

a = datetime.datetime.today()
print(a.year)
print(a.month)
print(a.day)
print(a.weekday())  # 获取星期0-6天,0表示星期一
print(a.isoweekday())  # 获取星期1-7天,1表示星期一

python 字符串变量取消转义 python去掉转义字符_转义_24

时间差
import datetime

a = datetime.datetime.today()
b = datetime.timedelta(days=3)
print(a - b)
print(a + b)

python 字符串变量取消转义 python去掉转义字符_转义_25

UTC时间与我们的东八区时间差差八个小时
import datetime

print(datetime.datetime.now())
print(datetime.datetime.utcnow())

python 字符串变量取消转义 python去掉转义字符_python 字符串变量取消转义_26

python 字符串变量取消转义 python去掉转义字符_python_27