正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的
这样的字符序列相匹配
快速检索文本、实现一些替换文本的操作
1.检查一串数字是否是电话号码
2.检测一个字符串是否符合Email
3.把一个文本里指定的单词替换为另一个单词
#查找字符串 re.findall import re a='C7C++5Java8C#2python0Javascript' #检测字符串中的指定字符 r=re.findall('python',a)#正则表达式,检测a中是否有字符串python if len(r)>0 print('字符串中包含python') else: print('NO') #检索字符串a中所有数字 r=re.findall('\d',a)#元字符'\d'表示数字0-9, print(r) #检测字符串中的非数字 r=re.findall('\D',a)#元字符'/D'表示非数字 print(r) s='abc,acc,adc,aef,afc,ahc' #抽象字符集 r=re.findall('a[cf]c',s)#抽象c或f,得出acc或afc print(r) re=re.findall('a[^cf]c',) #概括字符集 r=re.findall('\w',a)#\w匹配所有数字和字母 print(r) re=re.findall('\s',a)#\s匹配空白字符 #数量词-默认贪婪模式 a='python 111 java678php' r=re.findall('[a-z]{3,6}',a)#提取python、java、php,提取3-6个字符为一个 #非贪婪--+'?' r=re.findall('[a-z]{3,6}?',a)#提取pyt,hon,jav,php # *前字符可以出现0次或无限多次 +匹配日1或无限多次 ?匹配0次或1次 .匹配换行符之外所有其它字符 a='pyth0python1pythonn2' r=re.findall('python*',a)#匹配 pytho,python,pythonn *前的字符n可以出现0次或多次 #边界匹配 qq='100001' #要求QQ号是4~8位 ^表示从开始匹配 $表示从末尾匹配 r=fe.findall('^\d{4,8}$',qq) print(r) #组 []或关系 ()且关系 a='pythonpythonpythonpythonpython' r=re.findall('(python){3}',a)#重复匹配三次字符串python #第三个模式 re.I匹配除换行式所有字符,无视大小写 re.S匹配所有字符,无视大小写 a='PythonC#\nJavaPHP' r=re.findall('c#.{1}',lanuage,re.I| re.S)#忽略大小写 | 表示且关系 不是或 #re.sub 第二个参数也可以是函数 import re lanuage='PythonC#JavaC#PHPC#' r=re.sub('C#','GO',lanuage,1)#字符串中 C#被替换成GO,1表示只能被换第一个 lanuage=lanuage.replace('C#','GO')#所有C#被替换成GO def convert(value):#定义函数 convert pass r=re.sub('C#',convert,lanuage,1)#字符串第一个C#消失,把参数1去掉,所有C#消失 print(r) #函数作参数,第二个例子 def convert(value): matched = value.group() return '!!'+matched+'!!' r=re.sub('C#',convert,lanuage) print(t)#Python!!C#!!Java!!C#!!PHP!!C#!! # #大于等于6的数字替换为9,小于6的数字替换为0 import re s='A8C3721D86' def convert(value): matched=value.group() if int(matched)>=6: return '9' else: return '0' r=re.sub('\d',convert,s) print(r)#A9C0900D99 #剩下两个re方法, re.match re.search 匹配成功后结束匹配,即只能匹配一次 findalll则匹配所有 r=re.match('\d',s)#match 从字符串首开始匹配,如果首字母不符合要求,则找不到 r1=re.search('\d',s)#search 搜索字符串 print(r.span()) print(r1.group()) #有很多更适合自己的方式表达,适合自己的方法是最有用的方法 import re s='life is short,i use python' r=re.search('(life.*python)') print(r.group())#匹配整个字符串 r=re.findall(life(.*)python) print(r) #善于使用正则表达式,搜索常用正则表达式 JSON ( JavaScript Object Notation ) JavaScript对象标记 是一种轻量级的数据交换格式 字符串是JSON的表现形式 import json json_str='{"name":"wzt","age":20}'#json规范:字符串要用双引号 #json.loads() 这个方法可以把json字符串转化为python数据结构 student=json.loads(json_str) print(type(student))#dict 字典类型 print(student)#{'name':'wzt','age':20} print(student['name'])#wzt print(student['age'])#20 #如果JSON是数组 #字符串到语言数据结构的过程称为 反序列化 json_str='{{"name":"wzt","age":20},{"name":"wql","age":21}}'#JSON数组 print(type(student))#list 列表类型 print(student) #序列化 字典向字符串转换过程 # import json student = [ {'name':'wzt','age':20} ] json_str=json.dumps(student) print(type(json_str)) print(json_str) json python json对应python类型 object dict array list string str number int number float true Ture false False null None python的高级语法与用法 from enum import Enum#枚举 class VIP(Enum): YELLOW=1 GREEN=2 BLACK=3 RED=4 print(VIP.YELLOW)#打印枚举类型显示YELLOW而不是1 class Common():#普通类 YELLOW=1 print(VIP.YELLOW.name)#打印vip.YELLOW,是字符串类型 #枚举类型不支持大小比较,只支持等值比较 #两个枚举类型数值相同,则只能打印第一个枚举类型,另一个为第一个的别名 #函数式编程 #闭包=函数+环境变量 ??? def curve_pre(): a=25 def curve(x): return a*x*x return curce a=10 f=curve_pre() print(f._closure_) print(f(2))#100 def f1(): a=10 def f2(): a=20#此时a是局部变量,不影响外部变量 print(a)#20 print(a)#a=10 f2()#执行f2() a=20 print(a)#全局变量a=10 f1()#执行f1() #匿名函数 def add(x,y):#普通函数 return x+y add(1,2)#调用普通函数 f=lambda x,y:x+y#匿名函数,赋值给变量 print(f(1,2))#调用 #三元表达式 r = x if x > y else y #class map list_x = [1,2,3,4,5,6,7,8] def square(x): return x*x for x in list_x: square(x) r=map(square,list_x)#普通函数调用 r=map(lambda x: x*x+y,list_x,list_y)#匿名函数建立与使用 print(list(r)) #连续计算,连续调用lamdba 第一次lambda结果作为下次参数 from funtools import reduce list_x = [1,2,3,4,5,6,7,8] r=reduce(lambda x,y:x+y,list_x) print(r)#(((1+2)+3)+4)+5 #filter list_x=[0,1,0,0,1] #把数值为0的剔除掉 filter(lambda x: True if x==1 else False,list_x) print(list(r))# #装饰器 只是一种模式 对原来函数功能增加,又不修改原函数 一个函数可增加多个装饰器 import time #def f1(): # print(''This is a function) #def print_current_time(func): # print(time.time()) # func() #print_current_time(f1) def decorator(func): def wrapper(*args):#如果被装饰函数需要输入参数,wrapper需要填写形参,*args为可变参数 print(time.time()) func() return wrapper #f=decorator(f1) @decorator #@+装饰器名字 然后再弄个函数f1(),则给函数f1增加装饰器中的功能 def f1(func_name):#被装饰函数前需要@装饰器 print(''This is a function) f1(c)#功能有输出该字符串+显示时间(修饰器内的功能)
原生爬虫:
#1.抓取明确目的 2.找到数据对应的网页 3.分析王爷的结构找到数据所在的标签位置 #模拟HTTP请求,向服务器发送这个请求,获取到服务器返回给我们的HTML #用正则表达式提取需要的数据(主播名字。人气) #正式开始 from urllib import request class Spider(): url = ""#url,网址 def _fetch_content(self): request.urlopen(Spider.url)#抓取网页url htmls=r.read() def go(self): self.__fetch_content() spider=Spider() spider.go()
寒假的存档
来源:https://www.cnblogs.com/Flyingeggs/p/12373128.html