zoukankan      html  css  js  c++  java
  • 第十六天

    今日内容

    一、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)
  • 相关阅读:
    (2015年郑州轻工业学院ACM校赛题) B迷宫
    (2015年郑州轻工业学院ACM校赛题) A 彩票
    POJ 1861 Network
    动态逆序对
    K大数查询
    Dynamic Rankings
    Cleaning
    Boxes
    P3601 签到题
    How many integers can you find
  • 原文地址:https://www.cnblogs.com/kk942260238/p/14262792.html
Copyright © 2011-2022 走看看