re模块 sys模块,subprocess

 

一:正则表达式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)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值