第十六天

今日内容

一、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)
原文地址:https://www.cnblogs.com/kk942260238/p/14262792.html