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')
  • 相关阅读:
    HDU 2844 Coins(多重背包)
    HDU 4540 威威猫系列故事——打地鼠(DP)
    Codeforces Round #236 (Div. 2)
    FZU 2140 Forever 0.5
    HDU 1171 Big Event in HDU(DP)
    HDU 1160 FatMouse's Speed(DP)
    ZOJ 3490 String Successor
    ZOJ 3609 Modular Inverse
    ZOJ 3603 Draw Something Cheat
    ZOJ 3705 Applications
  • 原文地址:https://www.cnblogs.com/linagcheng/p/9475452.html
Copyright © 2011-2022 走看看