一:正则表达式re模块
1,什么是正则表达式:
正则表达式就是一系列具有特殊含义的字符组成的一套规则,该规则用来描述具有某一特征的字符串
正则就是用来去一个大的字符串中匹配除符合规则的子字符串
2,为什么要用正则?
1,用户注册的验证
2,爬虫方面的信息提取
3,使用正则表达式:
# 重复匹配 # .:匹配换行符以外的任意一个字符
## print(re.findall('a.c','abc a1c aac asd aaaaac a*c a+c abasd')) #['abc','a1c','aac','aac','a*c','a+c'] # []:匹配一个字符,该字符属于中括号内指定的字符
# print(re.findall('a..c','abc a1 c aac asd aaaaac a *c a+c abasd =')) # print(re.findall('a.c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c')) # print(re.findall('a[a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c')) # print(re.findall('a[A-Z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c')) # print(re.findall('a[-+*/]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c')) # print(re.findall('a[a-z][a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c')) # print(re.findall('a[^a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
# *: 必须与其他字符连用,代表左侧的字符出现0次或者无穷次 # print(re.findall('ab*','a ab abbb abbbb a1bbbb a-123'))ab* #['a','ab','abbb','abbbb','a','a']
# print(re.findall('ab{0,}','a ab abbb abbbb a1bbbb a-123'))
# ?: 必须与其他字符连用,代表左侧的字符出现0次或者1次 # print(re.findall('ab?','a ab abbb abbbb a1bbbb a-123'))ab? #['a','ab','ab','ab','a','a']
# print(re.findall('ab{0,1}','a ab abbb abbbb a1bbbb a-123'))
# +: 必须与其他字符连用,代表左侧的字符出现1次或者无穷次 # print(re.findall('ab+','a ab abbb abbbb a1bbbb a-123')) # ab+ # ['ab','abbb','abbbb']
# print(re.findall('ab{1,}','a ab abbb abbbb a1bbbb a-123'))
# {n,m}: 必须与其他字符连用 # print(re.findall('ab{1,3}','a ab abbb abbbb a1bbbb a-123')) # ab{1,3}
# ['ab','abbb','abbb']
# .*:贪婪匹配
# print(re.findall('a.*c','ab123adfc1134124123adasfc123123'))
# .*?:非贪婪匹配
# print(re.findall('a.*?c','ab123adfc1134124123adasfc123123'))
#():分组 # print(re.findall('expression="(.*?)"','expression="1+2+3/4*5" egon="beautiful"'))
# expression=".*?"
分组这边要注意一点
#为何同样的表达式search与findall却有不同结果: print(re.search('\(([\+\-\*\/]*\d+\.?\d*)+\)',"1-12*(60+(-40.35/5)-(-4*3))").group()) #(-40.35/5) print(re.findall('\(([\+\-\*\/]*\d+\.?\d*)+\)',"1-12*(60+(-40.35/5)-(-4*3))")) #['/5', '*3'] #看这个例子:(\d)+相当于(\d)(\d)(\d)(\d)...,是一系列分组 print(re.search('(\d)+','123').group()) #group的作用是将所有组拼接到一起显示出来 print(re.findall('(\d)+','123')) #findall结果是组内的结果,且是最后一个组的结果
二:sys模块简介
1 sys.argv 命令行参数List,第一个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platform 返回操作系统平台名称
sys.argv用来接收外部参数,可以用来接收外部参数然后实现对文件的修改
# import sys# sys.path# sys.argv # 用来接收python解释器执行py文件后跟的参数#例如:python cp.py argv1 argv2 arg3
#sys.argv=['cp.py','argv1','argv2','argv3']#将接收的参数存成列表的形式
import sys# print(sys.argv)# src_file=input('请输入源文件路径:')#在程序中一般用input的方式来实现对用户参数的接收src_file=sys.argv[1]#在cmd交互式环境中,用sys.argv来实现对参数的接收# dst_file=input('请输入目标文件路径:')dst_file=sys.argv[2]with open(src_file,'rb') as read_f,\ open(dst_file,'wb') as write_f: for line in read_f:
write_f.write(line)
打印进度条的功能
#打印% print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义 #可传参来控制宽度 print('[%%-%ds]' %50) #[%-50s] print(('[%%-%ds]' %50) %'#') print(('[%%-%ds]' %50) %'##') print(('[%%-%ds]' %50) %'###') #=========实现打印进度条函数========== import sys import time def progress(percent,width=50): if percent >= 1: percent=1 show_str=('[%%-%ds]' %width) %(int(width*percent)*'#') print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='') #=========应用========== data_size=1025 recv_size=0 while recv_size < data_size: time.sleep(0.1) #模拟数据的传输延迟 recv_size+=1024 #每次收1024 percent=recv_size/data_size #接收的比例 progress(percent,width=70) #进度条的宽度70
三:subprocess模块,查看子进程
# import os
# os.system('tasklist')
import subprocess
import time
obj=subprocess.Popen(
'taskliasdfsadfst',
shell=True, #这个shell必须加上
stdout=subprocess.PIPE,#正确的输出流
stderr=subprocess.PIPE#错误的输出流
)
# print(obj)
# stdout_res=obj.stdout.read()
# print(stdout_res.decode('gbk'))#默认是操作系统的gbk模式
# print(stdout_res)
stderr_res1=obj.stderr.read()
stderr_res2=obj.stderr.read()
stderr_res3=obj.stderr.read()
# print(stderr_res1.decode('gbk'))#解码后进行打印
print(stderr_res1)#信息只能读取一次
print(stderr_res2)
print(stderr_res3)
# import time
# time.sleep(50)