Python day16

Python day16

正则

正则是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。在Python中,并通过 re 模块实现。

模式概述
\w匹配字母数字及下划线
\W匹配非字母数字下划线
\s匹配任意空白字符,包括\n\t\r\f
\S匹配任意非空字符
\d匹配任意数字
\D匹配任意非数字
\A匹配字符串开始(只匹配开头的第一个)
\Z匹配字符串结束,如果存在换行则在换行前结束
\z匹配字符串结束
\G匹配最后匹配完成的位置
\n匹配一个换行符
\t匹配一个制表符
^匹配字符串的开头
$匹配字符串的结尾
.匹配任意字符串,除了换行符,当存在re.DOALL标记,匹配任意
[…]用来表示一组字符,单独列出:[amk]匹配’a’,‘m’或’k’
[^…]不在[]中的字符:[ ^abc ]匹配除了a,b,c之外的字符
*匹配0个或多个的表达式,贪婪方式
+匹配1个或多个的表达式
匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n}精确匹配n个前面的表达式
{n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪方式
a|b匹配a或者b
()匹配括号内对的表达式,也表示一个组

json&pickle模块

我们学习过用eval内置方法可以将一个字符串转成python对象,但eval方法是有局限性的,对于普通的数据类型,eval很管用,但遇到特殊类型的时候,eval就不管用了。

什么是序列化?

序列化指的是把内存的数据类型转换成一个特定的格式的内容,该格式的内容可用于存储或者传输给其他平台使用

为什么要序列化?

序列化得到的结果特定格式的内容有两种用途:
1.可以用于存储—>用于存档

​2.传输给其他平台使用---->跨平台数据交互

如何序列化之json和pickle:

json的序列化方法有两种

#1
import json
dic ={"name":"zhangsan"}
dic_json = json.dump(dic)#序列化
with open("a.json",mode="wt",encoding="utf-8") as f:
    f.write(dic_json)

#2
dic ={"name":"zhangsan"}
dic_json = json.dump(dic,open("a.json",mode="wt",encoding="utf-8"))

json的反序列化方法也有两种

#1
with open("a.json",mode="rt",encoding="utf-8") as f:
    res = f.read()
    dic = json.loads(res)#反序列化
    print(dic)

#2
dic = json.load(open("a.json",mode="rt",encoding="utf-8"))#反序列化
print(dic)

pickle的序列化方法和json的大同小异也是两种

#1
res = pickle.dumps({1,2,3,4,5})
print(res)
#2
pickle.dump({1,2,3,4,5},open("b.pk1",mode="wb"))

pickle的反序列化方法也是两种在此只演示一种了

#1
res = pickle.load(open("b.pk1",mode="rb"))
print(res)

猴子补丁

猴子补丁只是一种思想,一种戏谑的称呼。

将json中的dumps与dump,load与loads都替换成ujson的功能来提高效率,将其定义为一个函数,方便后续调用

import json
import ujson # pip3 install ujson 这是安装ujson

def monkey_patch_json():
    json.dump = ujson.dump
    json.dumps = ujson.dumps
    json.load = ujson.load
    json.loads = ujson.loads

monkey_patch_json()

time与datetime模块

在Python中时间分为三种格式
1.时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

print(time.time())

2.格式化的时间字符串(Format String)

print(time.strftime('%Y-%m-%H'))

3.结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

res = time.localtime()
print(res)

并且以上三者之间的格式可以通过内置的功能相互转换

​datetime模块

import datetime

print(datetime.datetime.now())

print(datetime.datetime.now() + datetime.timedelta(days=3))

print(datetime.datetime.now() - datetime.timedelta(days=3))#datetime模块可以相互加减天数,时间

random模块

import random

print(random.random())#(0,1)----float   大于0且小于1之间的小数

print(random.randint(1,3)) #[1,3]大于等于1且小于等于3之间的整数

print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之间的整数

print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]

print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合

print(random.uniform(1,3))
#大于1小于3的小数,如1.927109612082716

item=[1,3,5,7,9]
random.shuffle(item) #打乱item的顺序,相当于"洗牌"
print(item)

使用random编写随机生成验证码(大写字母+数字默认长度为4位)

import random
def make_code(size=4):#长度默认为4可自传参
    res = ""
    for x in range(size):
        num = random.randint(0, 9)
        s = chr(random.randint(65, 90))
        res += random.choice([str(num), s])
    return res

print(make_code(6))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值