常用内置模块(三)--subprocess、re
一、subprocess模块
进程:一个正在运行的程序
子进程:在父进程运行的过程中在其内部又开启了一个进程,即子进程。
作用:用于执行系统命令
os.system也可以获取当前的进程信息,但是它只能打印到屏幕,而无法进行其他操作,有局限性。
- 1 import subprocess
- 2
- 3 '''
- 4 sh-3.2# ls /Users/egon/Desktop |grep txt$
- 5 mysql.txt
- 6 tt.txt
- 7 事物.txt
- 8 '''
- 9
- 10 res1=subprocess.Popen('ls /Users/jieli/Desktop',shell=True,stdout=subprocess.PIPE)
- 11 res=subprocess.Popen('grep txt$',shell=True,stdin=res1.stdout,
- 12 stdout=subprocess.PIPE)
- 13
- 14 print(res.stdout.read().decode('utf-8'))
- 15
- 16
- 17 #等同于上面,但是上面的优势在于,一个数据流可以和另外一个数据流交互,可以通过爬虫得到结果然后交给grep
- 18 res1=subprocess.Popen('ls /Users/jieli/Desktop |grep txt$',shell=True,stdout=subprocess.PIPE)
- 19 print(res1.stdout.read().decode('utf-8'))
- 20
- 21
- 22 #windows下:
- 23 # dir | findstr 'test*'
- 24 # dir | findstr 'txt$'
- 25 import subprocess
- 26 res1=subprocess.Popen(r'dir C:\Users\Administrator\PycharmProjects\test\函数备课',shell=True,stdout=subprocess.PIPE)
- 27 res=subprocess.Popen('findstr test*',shell=True,stdin=res1.stdout,
- 28 stdout=subprocess.PIPE)
- 29
- 30 print(res.stdout.read().decode('gbk')) #subprocess使用当前系统默认编码,得到结果为bytes类型,在windows下需要用gbk解码
二、re模块
1、什么是re
re是正则表达式,正则表达式是一些带有特殊意义的符号或符号的组合
2、常用匹配模式
- 最常用的有:
- 单个字符匹配:
- \w 字母数字下划线
- \s 所有不可见字符(\n \t \f)
- \d 所有数字
- . 除了\n以外的所有字符
- ^ 字符串的开头,写在表达式的前面
- $ 字符串的末尾,写在表达式的后面
- 范围匹配:
- [abc] 括号内的一个字符
- a|b a或b
- 重复匹配
- {} {,m}:0到m之间, {m,n}:m到n之前 , {m}:必须是m
- + 匹配1个或多个,会一直匹配到不满足条件为止,用“?”问号来阻止贪婪匹配(匹配最少满足条件的字符数)
- * 匹配0个或多个,会一直匹配到不满足条件为止,用“?”问号来阻止贪婪匹配(匹配最少满足条件的字符数)
- ? 匹配1个或0个
- 分组
- () 匹配括号内的表达式,提取括号中的表达式,不会改变原来的表达式逻辑意义
- 取消分组
- (?: )
- 1 import subprocess
- 2
- 3 '''
- 4 sh-3.2# ls /Users/egon/Desktop |grep txt$
- 5 mysql.txt
- 6 tt.txt
- 7 事物.txt
- 8 '''
- 9
- 10 res1=subprocess.Popen('ls /Users/jieli/Desktop',shell=True,stdout=subprocess.PIPE)
- 11 res=subprocess.Popen('grep txt$',shell=True,stdin=res1.stdout,
- 12 stdout=subprocess.PIPE)
- 13
- 14 print(res.stdout.read().decode('utf-8'))
- 15
- 16
- 17 #等同于上面,但是上面的优势在于,一个数据流可以和另外一个数据流交互,可以通过爬虫得到结果然后交给grep
- 18 res1=subprocess.Popen('ls /Users/jieli/Desktop |grep txt$',shell=True,stdout=subprocess.PIPE)
- 19 print(res1.stdout.read().decode('utf-8'))
- 20
- 21
- 22 #windows下:
- 23 # dir | findstr 'test*'
- 24 # dir | findstr 'txt$'
- 25 import subprocess
- 26 res1=subprocess.Popen(r'dir C:\Users\Administrator\PycharmProjects\test\函数备课',shell=True,stdout=subprocess.PIPE)
- 27 res=subprocess.Popen('findstr test*',shell=True,stdin=res1.stdout,
- 28 stdout=subprocess.PIPE)
- 29
- 30 print(res.stdout.read().decode('gbk')) #subprocess使用当前系统默认编码,得到结果为bytes类型,在windows下需要用gbk解码
- 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']
常用符号
- 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')
常用内置模块(三)--subprocess、re的更多相关文章
- Python第五章__模块介绍,常用内置模块
Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群 群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...
- 简学Python第五章__模块介绍,常用内置模块
Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群 群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...
- Python17个常用内置模块总结
Python17个常用内置模块总结 1.getpass 2.os 3.sys 4.subprocess 5.hashlib 6.json 7.pickle 8.shutil 9.time 10.dat ...
- python常用模块之subprocess
python常用模块之subprocess python2有个模块commands,执行命令的模块,在python3中已经废弃,使用subprocess模块来替代commands. 介绍一下:comm ...
- 常用内置模块(一)——time、os、sys、random、shutil、pickle、json
常用内置模块 一.time模块 在python中,时间分为3种 1.时间戳: timestamp,从1970年1月1日到现在的秒数, 主要用于计算两个时间的差 2.localtime ...
- Python基础之模块:2、包的使用和软件开发目录规范及常用内置模块
目录 一.包的使用 1.什么是包 2.包的具体使用 1.常规导入 2.直接导入包名 二.编程思想转变 1.面条阶段 2.函数阶段 3.模块阶段 三.软件目录开发规范 1.bin 2.conf 3.co ...
- 国内常用的三种框架:ionic/mui/framework7对比
国内常用的三种框架:ionic/mui/framework7对比 原文连接:http://zhihu.com/question/19558750/answer/91179040
- 操作sqlserver数据库常用的三个方法
1. ADO.NET -> 连接字符串,常用的两种方式: server=计算机名或ip\实例名;database=数据库名;uid=sa;pwd=密码; server=计算机名或ip\实例名;d ...
- C语言中最常用的三种输入输出函数scanf()、printf()、getchar()和putchar()
本文给大家介绍C语言中最常用的三种输入输出函数scanf().printf().getchar()和putchar(). 一.scanf()函数格式化输入函数scanf()的功能是从键盘上输入数据,该 ...
- PHP常用的三种设计模式
本文为大家介绍常用的三种php设计模式:单例模式.工厂模式.观察者模式,有需要的朋友可以参考下. 一.首先来看,单例模式 所谓单例模式,就是确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实 ...
随机推荐
- 请简要描述margin重复问题,及解决方式
两个相邻的盒子垂直方向上的margin会发生重叠,取较大的那个值,而不是相加. 解决: 父级设置padding代替margin 父级设置overflow:hidden 当前元素设置透明的边框 使用绝对 ...
- sass-loader使用data引入公用文件或全局变量报错
报错信息: ValidationError: Invalid options object. Sass Loader has been initialised using an options obj ...
- Java集合详解2:一文读懂Queue和LinkedList
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- [Gamma]阶段发布说明
小小易校园微信小程序发布说明 第二版小小易校园小程序发布啦~ 打开微信,点击右上角➕,选择扫一扫,扫描以下二维码即可进入小程序: 版本功能: 上一版功能请参见[Beta阶段]发布说明. 当前版本的更新 ...
- html5 audio标签切换播放音乐的方法
html5 audio标签切换播放音乐的方法<pre><audio id="music1" preload loop="loop">&l ...
- CentOS下安装php 5.6.19
# php安装包下载wget https://www.php.net/distributions/php-5.6.19.tar.bz2# 解压bunzip2 php-5.6.19.tar.bz2tar ...
- 30分钟用 Laravel 实现一个博客
介绍 Laravel 是一款 MVC架构. 目前最流行的 PHP框架. Laravel的优点在于: 丰富的composer类库支持, 优雅的代码, 未来的主流框架(目前市场占有率最高的框架) Lara ...
- [转帖]进程状态的转换与PCB详解
进程状态的转换与PCB详解 https://blog.csdn.net/qq_34666857/article/details/102852747 挺好的 之前没好好学习. 返回主目录 之前的 ...
- protobuf, python Enum
继承enum.Enum的python class,其实是一个, name-value的关系,可以直接className(value)得到一个类.比如 import enum class xx(enum ...
- golang 数据导出excel (github.com/360EntSecGroup-Skylar/excelize)
package handler import ( "fmt" "git.shannonai.com/public_info_prophet/prophet_risk_ag ...