今日内容
一、re模块
1.1正则表达式
import re
re.findall("过滤条件","待过滤字符串") 会将满足过滤条件的字符放进一个列表中
例:
re.findall("abc","abcaaeeeffdsabc")
1.2正则表达式各种用法
#w 匹配字母数字下划线
print(re.findall("w","asddvdqk_dasd $@!@$"))
#W 匹配非字母数字下划线
print(re.findall("W","asddvdqk_dasd $@!@$"))
#s 匹配任意空白字符(包括
, 等)
print(re.findall("s"," asd dasd asd
asd"))
#S 匹配非空白字符
print(re.findall("S"," asd dasd asd
asd"))
#d 匹配数字
print(re.findall("d","sadmm1234 asd
"))
#D 匹配非数字
print(re.findall("D","sadmm1234 asd
"))
#^只在字符串开头匹配,找没找到都只会匹配开头,不会过滤整个字符串 如果字符串是多行的话,结尾加re.M可以忽略换行符
print(re.findall("^asd","asd aaaddd dasd "))
print(re.findall("^egon$",'''
egon
asdf
0011
egon''',re.M))
#$只在字符串末尾匹配,找没找到都只会匹配末尾,不会过滤整个字符串
print(re.findall("asd$","asd aaaddd dasd"))
#A只在字符串开头匹配,找没找到都只会匹配开头,不会过滤整个字符串 如果字符串是多行的话,结尾加re.M也不会忽略换行符
#只在字符串末尾匹配,找没找到都只会匹配末尾,不会过滤整个字符串
print(re.findall("Aegon",'''
egon
asdf
0011
egon''',re.M))
#. 代表任意字符串,除了换行符
,当结尾加上re,DOTALL时.可以代表任意字符包括换行符
print(re.findall("", "asdasmkxzc
asd", re.DOTALL))
#[] 可以在【】中指定查找的范围,但是【】只能代表一个字符,【1,2,3】 = 1或者是2或者是3 ^加在中括号代表与中括号内容取反即只要不是123都行
print(re.findall("[abc]","asdvxzadafzcv"))
#?:左边那个字符出现0次或1次
print(re.findall('ab?',"b a abbbbbbbb ab"))
#*:左边那个字符出现0次或无穷次次
print(re.findall('ab*',"b a abbbbbbbb ab"))
#+:左边那个字符出现1次或无穷次
print(re.findall('ab+',"b a abbbbbbbb ab"))
#{}:可在花括号内指定范围出现多少次才行
print(re.findall('ab{2,4}',"b a abbbbbbbb ab"))
#在上面4个符号后面加一个?可以让符号特性变成非贪婪的,即原本字符串中会匹配最远的字符串,加?之后会匹配到最近的字符串
print(re.findall("href='(.+?)'","< a href='www.baidu,com '>'我特么是百度啊'</ a>< a href='https://www.sina.com.cn'>'我特么是新浪啊'</ a>"))
#括号内加?:可以显示整个搜索内容而不是只显示()内内容
print(re.findall('d+(?:.d+)?','abc11dad33.1asdkfsn44.2asdndsa4.4'))
#search : 判断字符串内是否有符合正则表达式的内容,只能匹配一次,如果字符串中有两个符合的只会找到第一次,指定^的话只会在字符串开头找,开头不符合就会显示None
res = re.search("^11","egon 11 san 11 ")
print(res)
#match:作用与search相同,只是match是默认只从开头找
res = re.match("11","egon 11 san 11 ")
print(res)
#sub可以换字符串的顺序,也可以替换字符串中内容
print(re.sub('^(w+)(.*?s)(w+)(.*?s)(w+)$',r"52341",'lxx is sb'))
print(re.sub("^w+","xxxxxxxxxxx",'lxx is sb'))
#可以将正则表达式存起来,匹配不同字符串
pattern = re.compile("egon",re.M)
#re.M支持多行匹配
print(pattern.findall("egon zxcsadnjknlafsdfnljk"))
print(pattern.search("asjkdegonxzjcjkafjkshf"))
二、序列化与反序列化
2.1json模块
import json
#json:优点:通用每个计算机语言都能认识 缺点:但是能转换的数据类型有限,json格式内不能有单引号
#pickle:优点:每种数据类型的能转换,缺点:不通用,只能python语言认识(主要适用于存档之类的)
#eval():可以直接将字符串中的代码拿出来,eval(‘{"xxx":True}’)可以直接取到里面的字典
#json
#序列化 dump
dic = {"xxx":True,
"yyy":"hyk",
"zzz":123}
res = json.dumps(dic)
print(res)
#一步写入文件
json.dump(dic,open("a.json",mode="at",encoding="utf-8"))
#反序列化 loads
new_res = json.loads(res)
print(res)
#一步将文件中的json格式反序列化
dic = json.load(open("a.json",mode="rt",encoding="utf-8"))
print(dic)
2.2pickle模块
#序列化
import pickle
pickle.dump({1,2,3,4},open("a.pkl",mode="wb"))
#反序列化
pickle.load(open("a.pkl",mode="rb"))
2.3猴子补丁
import json
import ujson #下载ujson模块:pip3 install ujson
#ujson在以下四个功能比json效率更高
#在文件已经用json格式写好的情况下可以转换成ujson格式
#把功能写进函数里以后用的时候直接调用就可以,取名为猴子补丁
def monkey_patch_json():
json.dump = ujson.dump
json.dumps = ujson.dumps
json.load = ujson.load
json.loads = ujson.loads
monkey_patch_json()
三、时间模块
3.1time模块
import time
#时间分为三种模式
#1、时间戳,主要用来运算
print(time.time())
#2、格式化的字符串 主要用来看的
print(time.strftime("%Y-%m-%H %X"))
#3、结构化的时间 可以只获取时间的某一部分
print(time.localtime())
#世界标准时间
print(time.gmtime())
#三种时间格式可以相互转换,但是时间戳格式不能和格式化时间转换
#可以看博客,time模块的时间格式转换
3.2datetime模块
import datetime
#可以直接查看当前时间
print(datetime.datetime.now())
#还可以参与时间运算,算出几天后的时间 #不光是天也可以是秒或者分之类的
print(datetime.datetime.now() + datetime.timedelta(days=3))
四、random模块
随机功能
import random
#随机取大于0且小于1之间的小数
print(random.random())
# 大于等于1且小于等于9之间的整数
print(random.randint(1,9))
# 大于等于1且小于3之间的整数
print(random.randrange(1,3))
#可以自己指定一些值从里面随机取一个
print(random.choice([1.2,"asjdh",123]))
#可以指定随机取几个值
print(random.sample([1.23,"ajksdh","dasd",123],2))
#取1到3之间的小数
print(random.uniform(1,3))
#洗牌即打乱顺序
item = [1,2,3,4,5,6,7,8,9,10]
random.shuffle(item)
print(item)
#验证码原理 取随机的字母和数字
num = str(random.randint(0,9)) #得到0-9随机的数字
print(ord("A")) #将字母转成数字
print(ord("Z"))
print(chr(65)) #将数字转成字母
s = chr(random.randint(65,90)) #随机的A-Z字母
print(ord("a"))
print(ord("z"))
print(chr(97))
print(chr(122))
c = chr(random.randint(97,122))
res1 = random.choice([num,s]) #随机的0-9,A-Z
#验证码函数
res = ''
for i in range(4):
num = str(random.randint(0, 9))
s = chr(random.randint(65, 90))
res += random.choice([num,s,c])
print(res)