2021-01-06 re、time与datetime、json与pickle、random模块的使用

不要将文件名与第三方库的名字一样,否则会冲突(可能会导致第三方库无法导入)

re模块
正则表达式模块
re.findall()字符串里都找
正则表达式常用匹配格式:
\w 匹配字母数字下划线
\W 匹配字母数字下划线
\s 匹配任意空白字符 等价于[\t\n\r\f]
\S 匹配非空字符
\d 匹配任意数字,等价于[0-9]
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果存在换行,只匹配到换行前的结束字符串
\z 匹配字符串结束
\G 匹配最后完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配字符串开头
$ 匹配字符串末尾
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[…] 用来表示一组字符,单独列出:[amk]匹配’a’,‘m’或’k’
[^…] 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符

  • 匹配0个或多个表达式
    
  • 匹配一个或多个表达式
    

? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n} 精准匹配前面n个表达式
{n,m} 匹配n到m次由前面正则表达式定义的片段,贪婪方式
a|b 匹配a或b
() 匹配括号里的表达式,也表示一个组
列表如下:

在这里插入图片描述
若想详细了解正则表达式可以参考:
https://blog.csdn.net/yufenghyc/article/details/51078107

序列化:把内存中的一种数据类型转成一种可以存储的数据,或者转译成可以发给别人的数据
就好比将一个字典存入文件,字典本身是存不进文件的,但我们将字典转成字符串,在存进文件就可以了,这个过程就是序列化

反序列化:将已经硬盘储存好的数据转译到内存,转译成一种数据类型
如将文件中的字符串转成字典

json&pickle
json的特点是通用跨平台性强,即所有语言都可以进行转译
注意:json里没有单引号,json中没有元组,与python数据类型对应如下:

序列化语法:dump:
import json
dic = {“name”:“egon”,“xxx”:“True”,“yyy”:None}
json.dump(dic,open(“a.json”,“wt”,encoding=“utf-8”))
#一步到位:不用在单独打开文件往里写入,json支持直接写,但格式一定不能错
dumps:
json.dumps(‘dshkhashashl’)
转成json格式的字符串,切不可以直接一步到位式的写入

反序列化:
mport json
f=open(‘序列化对象’)
data=json.loads(f.read())# 等价于data=json.load(f)

pickle
特点:python所有的数据类型都认识,多用于存档
序列化与反序列化与json相似,也是用dumps,dump 和load,loads

import pickle

dic={
    
    'name':'alvin','age':23,'sex':'male'}

print(type(dic))#<class 'dict'>

j=pickle.dumps(dic)
print(type(j))#<class 'bytes'>

f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes'
f.write(j)  #-------------------等价于pickle.dump(dic,f)
f.close()
#-------------------------反序列化
import pickle
f=open('序列化对象_pickle','rb')

data=pickle.loads(f.read())#  等价于data=pickle.load(f)
print(data['age'])

了解内容:
猴子补丁:
属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。
猴子补丁的核心就是用自己的代码替换所用模块的源代码
例子如下:

class Monkey:
    def hello(self):
        print('hello')

    def world(self):
        print('world')


def other_func():
    print("from other_func")



monkey = Monkey()
monkey.hello = monkey.world
monkey.hello()
monkey.world = other_func
monkey.world()

time与datetime
时间的三种格式:

 1、时间戳:时间戳表示的是从19701100:00:00开始按秒计算的偏移量,
    通常用来计算时间间隔  time.time()
    2、格式化的字符串:
    通常用来记录日志,因为其表示的时间非常清晰,所以用来表示时间比较合适
 print(time.strftime("%Y-%m-%d %H:%M:%s")
   结构化时间:
可以单独的取到某个时间,如一年中的第几天,第几个月
print(time.localtime())   #输出本地时区时间
time.sleep()休眠多少秒

三者互相转换的关系如下:

在这里插入图片描述

在这里插入图片描述

--------------------------按图2转换时间
2 asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'3 如果没有参数,将会将time.localtime()作为参数传入。
4 print(time.asctime())#Sun Sep 11 00:43:43 2016
5 
6  ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为
7 None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))8 print(time.ctime())  # Sun Sep 11 00:46:38 2016
9 print(time.ctime(time.time()))  # Sun Sep 11 00:46:38 2016
datetime:
import datetime
 print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
 print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
 print(datetime.datetime.now() )
 print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
 print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
 print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
 print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分



 c_time  = datetime.datetime.now()
 print(c_time.replace(minute=3,hour=2)) #时间替换

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)

生成随机数的小工具:

import random
def make_code(n):
    res=''
    for i in range(n):
        s1=chr(random.randint(65,90))
        s2=str(random.randint(0,9))
        res+=random.choice([s1,s2])
    return res

print(make_code(9))

若想详细了解模块的使用可参照:

https://www.cnblogs.com/linhaifeng/articles/6384466.html#_label13

猜你喜欢

转载自blog.csdn.net/givenchy_yzl/article/details/112297288