Python之常用模块之retime

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/10/11 16:36
# @Author : Ropon
# @File : 17_01.py

import re

#findall 匹配所有,返回一个列表,其中是所有匹配的元素
# ret = re.findall('\d+', '测试正159则中数字258')
# ret = re.findall('\d', '测试正159则中数字258')
# print(ret)

# search 只匹配从左到右的第一个,得到不是直接结果,需要通过变量的group方法获取
# ret = re.search('[a-z]+', '测试正159则中数字aw258')
# print(ret)
# print(ret.group())

# # match 以什么开头开始匹配,相当于search中正则表达式加^,得到不是直接结果,需要通过变量的group方法获取
# ret = re.match('\d+', '1258测试')
# # ret = re.search('\d+$', '测试1258')
# print(ret)
# print(ret.group())

# 字符串处理扩展:替换、切割
# split
# s = 'roponluopeng'
# print(s.split(''))
# s = 'ropon88peng68luo28'
# ret = re.split('\d+', s)
# print(ret)

# sub 将匹配到的元素替换成新字符
# ret = re.sub('\d+', 'R', 'AbcR123测试1258')
# print(ret)

# subn 将匹配到的元素替换成新字符,返回的是一个元组,第二个参数是替换次数
# ret = re.subn('\d+', 'R', 'AbcR123测试1258')
# print(ret)

# compile
# 使用正则时,先将正则表达式编译成字节码,使用compile,先编译,多次使用不会多次编译
# ret = re.compile('\d+')
# print(ret)
# res = ret.findall('AbcR123测试1258')
# print(res)
# res = ret.search('AbcR123测试1258')
# print(res.group())

# finditer
# 返回的是迭代器,所有结果在迭代器中,通过循环及便利的group方法取值,可节省内存
# ret = re.finditer('\d+', 'AbcR123测试1258')
# for i in ret:
# print(i.group())

# 总结
# findall 查找所有匹配项,返回的是列表
# search 从左到有匹配,匹配到就返回变量,通过group取匹配的第一个值,不匹配就返回None,group会报错
# match 相当于在search中正则表达式前加^,意思以什么开头
# spilt 按正则切割,匹配到的内容会被删除,返回的是列表
# sub/subn 替换,按正在查找替换,返回替换后的内容,subn返回的是元组,第二个值是替换次数
# compile 先编译正在表达式,用编译后的结果去执行findall、search、match、finditer,可提高效率,节省时间
# finditer 返回的是迭代器,所有结果在迭代器中,通过循环及便利的group方法取值,可节省内存


# s = '<html><head><title>正则标题测试</title></head><body>正文测试<b>加粗</b></body></html>'
# ret = re.search('<title>(\w+)</title>', s)
# ret = re.search('<(\w)>(\w+)</(\w)>', s)
# ret = re.search('<(\w+)>(\w+)</(\w+)>', s)
# print(ret.group())

# 使用findall能顺利取到分组中的内容,有一个特殊的语法 >(正则表达式)<
# s = '<html><head><title>正则标题测试</title></head><body>正文测试<b>加粗</b></body></html>'
# ret = re.findall('(\w+)' ,s)
# ret = re.findall('>(\w+)<' ,s)
# print(ret)

# ret = re.findall('\d+(\.\d+)?', '8.0812*6')
# print(ret)

# 取消分组优先 (?:正则表达式)
# ret =re.findall('\d+(\.\d+)', '8.288.a8')
# print(ret)
#返回分组匹配的内容
# ret =re.findall('\d+(?:\.\d+)', '8.288.a8')
# print(ret)
#返回匹配的内容

# 分组,对于正则表达式,表示整体出现的次数 ()
# (\.[\w]+)? (\.(/w+))?
# s = '123.ab456'
# ret = re.findall('\.[\w]+', s)
# print(ret)
# ret = re.findall('\.(?:\w+)', s)
# ret = re.findall('\d+(?:\.[\w]+)?', s)
# print(ret)

# Python中分组可帮您精确找到您真正所需内容
# <(\w+)>(\w+)</(\w+)>
# s = '<html>bb<head>aa<title>测试标题</title></head><body>33</body></html>'
# ret = re.findall('<(\w+)>(\w+)</(\w+)>' ,s)
# print(ret)

# split
#注意:正则表达式加()分组,保留分割后的元素同时也保留匹配元素
# ret = re.split('\d+', 'ropon8luo68peng282peng')
# # ret = re.split('(\d+)', 'ropon8luo68peng282peng')
# print(ret)

#Python与正则特殊约定
# 分组命名 自定义名称
# (?P<组的名字>正则表达式)
# 后向引用
# (?P=组的名字)

# s = '<a>wa21haha</a>'
# ret = re.search('(?P<con>\d+)',s)
# print(ret.group(1))
# print(ret.group('con'))

# s = '<a>wahaha</a>'
# pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>'
# ret = re.search(pattern, s)
# print(ret.group())
# print(ret.group(1))
# print(ret.group(2))
# print(ret.group(3))
# print(ret.group(1) == ret.group(3))

# s = '<a>wahaha</a>'
# pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>'
# ret = re.search(pattern, s)
# print(ret.group(2))

# time模块
import time

# 常用方法
# 延时,单位秒
# time.sleep(secs)

# time.sleep(3)
# print("test")

# 获取当前时间戳
# time.time()

# a = time.time()
# print(a)

# Python中三种方式表示时间:时间戳、元组、格式化时间字符串
# 1、时间戳:返回的float类型
# print(type(time.time()))
# 2、格式化时间字符串
# %y 2位数年份 18
# %Y 4位数年份 2018
# %m 月份 10
# %d 月中某天 12
# %H 小时[24小时制] 16
# %I 小时[12小时制] 04
# %M 分钟 05
# %S 秒 23
# %a 本地简化星期名称 Fri
# %A 本地完整星期名称 Friday
# %b 本地简化月份名称 Oct
# %B 本地完整完整名称 October
# %c 本地相应的日期和时间表示 Fri Oct 12 16:06:40 2018
# %j 年内的一天 285
# %p 本地AM或PM PM
# %U 一年中的星期数,星期天为星期的开始 40
# %w 星期(0-6),星期天为星期的开始 5
# %W 一年中的星期数,星期一为星期的开始 41
# %x 本地相应日期表示 10/12/18
# %X 本地相应时间表示 16:08:31
# %Z 当前时区名称
# %% %号本身

# 2018-10-12
# print(time.strftime("%Y-%m-%d"))
# 2018.10.12
# print(time.strftime("%Y.%m.%d"))
# 2018 10 12
# print(time.strftime("%Y %m %d"))
# 15:57:27
# print(time.strftime("%X"))

# 3、元组 struct_time元组共有9个元素 年,月,日时,分,秒,一年中第几周,一年中第几天,

# 总结:时间戳是计算机能识别的时间;时间字符串是人能看懂的时间;元组是用来操作时间的