zoukankan      html  css  js  c++  java
  • 常用内置模块(四)——subprocess、re

    常用模块(四)

    一、subprocess模块

    1、subprocess为子流程模块,用于执行系统命令,该模块在Python全栈开发中不常用

    2、常用方法

      run    返回一个表示执行结果的对象
      call    返回的执行的状态码

     1 import subprocess
     2 
     3 res = subprocess.run("tasklist",shell=True,stdout=subprocess.PIPE)
     4 print(res.stdout.decode("gbk"))
     5 
     6 print(res.stderr)
     7 
     8 
     9 res = subprocess.call("tasklist",shell=True)
    10 print(res)
    run方法与callt方法

    3、Popen()方法

    1 #  第一个进程a读取tasklist的内容,将数据交给另一个进程b,进程b将数据写到文件中
    2 res1 = subprocess.Popen("tasklist",stdout=subprocess.PIPE,shell=True,stderr=subprocess.PIPE)
    3 
    4 res2 = subprocess.Popen("echo >a.txt", stdout=subprocess.PIPE, shell=True, stderr=subprocess.PIPE,stdin=res1.stdout)
    5 
    6 print(res2.stdout.read().decode("gbk"))

    二、re模块

    1、什么是re

    re是正则表达式,正则表达式是一些带有特殊意义的符号或符号的组合

    2、常用匹配模式

    最常用的有:
      单个字符匹配:
         w    字母数字下划线 
      s 所有不可见字符( f)
       d 所有数字
        . 除了 以外的所有字符
        ^ 字符串的开头,写在表达式的前面
        $    字符串的末尾,写在表达式的后面   范围匹配:     [abc] 括号内的一个字符
    a
    |b a或b   重复匹配     {} {,m}:0到m之间, {m,n}:m到n之前 , {m}:必须是m
       
    + 匹配1个或多个,会一直匹配到不满足条件为止,用“?”问号来阻止贪婪匹配(匹配最少满足条件的字符数)
    * 匹配0个或多个,会一直匹配到不满足条件为止,用“?”问号来阻止贪婪匹配(匹配最少满足条件的字符数)
    ? 匹配1个或0个   分组     ()  匹配括号内的表达式,提取括号中的表达
    式,不会改变原来的表达式逻辑意义

      取消分组
        (?: )

     1 import re
     2 
     3 src = 'abc_d12 3d d5s
    d'
     4 
     5 # d 所有数字
     6 print(re.findall('d', src))
     7 # ['1', '2', '3', '5']
     8 
     9 # w 所有数字字母下划线
    10 print(re.findall('w', src))
    11 # ['a', 'b', 'c', '_', 'd', '1', '2', '3', 'd', 'd', '5', 's', 'd']
    12 
    13 # s 所有不可见字符
    14 print(re.findall('s', src))
    15 # [' ', ' ', '
    ']
    16 
    17 # . 所有除了
    以外的字符
    18 print(re.findall('.', src))
    19 # ['a', 'b', 'c', '_', 'd', '1', '2', ' ', '3', 'd', ' ', 'd', '5', 's', 'd']?
    20 
    21 # ^ 匹配行首指定字符
    22 print(re.findall('^a', src))
    23 # ['a']
    24 
    25 # $ 匹配行尾指定的字符
    26 print(re.findall('d$', src))
    27 # ['d']
    28 
    29 # [abd] 匹配中括号内的任意一个字符(a到d,1到3)
    30 print(re.findall('[a-d1-3]', src))
    31 # ['a', 'b', 'c', 'd', '1', '2', '3', 'd', 'd', 'd']
    32 print(re.findall('[^a-d]', src))  # 匹配除了a-d以外的字符
    33 # ['_', '1', '2', ' ', '3', ' ', '5', 's', '
    ']
    34 
    35 # {m,n}
    36 print(re.findall('d{1,3}', 'd dd ddd dddd'))
    37 # ['d', 'dd', 'ddd', 'ddd', 'd']
    38 
    39 # +  1个或多个
    40 print(re.findall('d+', 'd dd ddd dddd'))
    41 # ['d', 'dd', 'ddd', 'dddd']
    42 
    43 # * 0个或多个
    44 print(re.findall('d*', 'd dd ddd dddd'))
    45 # ['d', '', 'dd', '', 'ddd', '', 'dddd', '']
    46 
    47 # ?  0个或1个
    48 print(re.findall('d?', 'd 21dd_
    4'))
    49 # ['', '', '1', '2', '', '', '', '', '4', '']
    常用符号
     1 # 贪婪匹配  *  +    不是固定的特殊符号  只是一种现象
     2 # 会一直匹配到不满足条件为止 用问号来阻止贪婪匹配(匹配最少满足条件的字符数)
     3 
     4 print(re.findall("w+?", "ajshsjkdsd"))
     5 # ['a', 'j', 's', 'h', 's', 'j', 'k', 'd', 's', 'd']
     6 
     7 print(re.findall("w*?", "ajshsjkdsd"))
     8 # ['', '', '', '', '', '', '', '', '', '', '']
     9 
    10 print(re.findall("w+?s", "ajshsjkdsd"))
    11 # ['ajs', 'hs', 'jkds']
    12 
    13 print(re.findall("w*?s", "ajshsjkdsd"))
    14 # ['ajs', 'hs', 'jkds']
    贪婪匹配和阻止贪婪

    3、re模块的常用方法

    (1).findall        从左往右查找所有满足条件的字符 返回一个列表
    (2).search      返回第一个匹配的字符串,结果封装为对象
    (3).match(不常用)   匹配行首, 返回值与search相同
    (4).compile(不常用)   将正则表达式封装为一个正则对象,可以重复使用这个表达式

     1 import re
     2 
     3 print(re.findall('w', src))
     4 # ['a', 'b', 'c', '_', 'd', '1', '2', '3', 'd', 'd', '5', 's', 'd']
     5 
     6 print(re.search('hello','weqwe hello dddd helllo dd'))
     7 # <_sre.SRE_Match object; span=(6, 11), match='hello'>
     8 
     9 print(re.match("hello"," world hello python"))
    10 # None
    方法

     4、分组

    分组是从左边第一个左括号起,,index逐步增加,下面的1-4就是res=re.match(r"((a(b)c)(def))","abcdef")

     1 ts = "abcdef"
     2 reg = r"((a(b)c)(def))"
     3 regex = re.compile(reg)
     4 res = regex.match(ts)
     5 print(res)
     6 print(res.span()) # 匹配的结果的区间
     7 print(res.group(0)) # abcdef
     8 print(res.group(1)) # 1 -> 第一个()   abcdef
     9 print(res.group(2)) # abc
    10 print(res.group(3)) # b
    11 print(res.group(4)) # def
    12 print(res.groups()) # ('abcdef','abc','b','def')
  • 相关阅读:
    RE_知识回顾
    python网络爬虫边看边学(selenium模块三验证码)
    python网络爬虫边看边学(selenium模块二无头浏览器)
    python网络爬虫边看边学(selenium模块一)
    python爬虫边看边学(多线程多进程协程)
    python爬虫边看边学(xpath模块解析)
    python爬虫边看边学(bs4安装与使用)
    python爬虫边看边学(数据解析)
    python爬虫边看边学(基础)
    python基础结束
  • 原文地址:https://www.cnblogs.com/linagcheng/p/9475452.html
Copyright © 2011-2022 走看看