python全栈学习记录(十八)re、os和sys、subprocess

news2025/2/22 7:27:47

re、os和sys、subprocess

文章目录

  • re、os和sys、subprocess
  • 一、re
    • 1.正则字符
    • 2.正则表达式的使用
    • 3.group的使用
    • 4.贪婪匹配与惰性匹配
    • 5.其他注意事项
  • 二、os和sys
    • 1.os
    • 2.sys
  • 三、subprocess
  • 四、打印进度条

一、re

python中的re模块用来使用正则表达式,正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串,正则就是用来去一个大的字符串中匹配出符合规则的子字符串。

1.正则字符

*表示字符出现0次及以上
+表示字符出现1次及以上
{2,5}表示字符出现2至5次
?表示字符出现0或1次
.表示任意字符
(a|b)表示a或b
(a&b)表示a与b
[a-z A-Z]表示所有英文字母
注意:[+ - * /]会报错,-在[]内表示取范围,如果想表示减号需要转义-
[^0-9] 表示取数字以外的字符,^在[]内表示取反
\d表示数字 \D表示非数字
\w表示字母、数字、下划线 \W表示非字母、数字、下划线
\s表示空白字符(换号、空格、制表符等) \S表示非空白字符
\d表示边界( ab ,左右侧的空格就是边界)
^表示字符首行 $表示字符末尾

2.正则表达式的使用

re.findall(正则字符,字符串,flag)会匹配字符串中所有的满足要求内容,并返回列表
常见的flag设置有三种,re.I表示不区分大小写;re.M表示多行匹配,^和$可以匹配多行的首尾;re.DOTALL表示.可以匹配到换行。

import re
#匹配以139开头的手机号码
res=re.findall('139.{8}','13914011111 13812311111 13915111111')
print(res)
<<<['13914011111', '13915111111']

re.search(正则字符,字符串,flag)会以match对象的形式返回一个匹配值(match对象中包含了值和索引)

import re
#匹配以139开头的手机号码
res=re.search('139.{8}','13914011111 13812311111 13915111111')
print(res)
<re.Match object; span=(0, 11), match='13914011111'>
#可以通过group函数取出match对象内的值,span函数取出其索引
print(res.group())
print(res.span())
<<<13914011111
<<<(0,11)

re.split(正则字符,字符串,flag)表示按正则规则拆分字符串,返回拆分后的列表

import re
res=re.split('\W+','adc ?ews12  wdssa+_ssa')
print(res)
<<<['adc', 'ews12', 'wdssa', '_ssa']

re.sub(正则字符,替换字符串/函数地址,字符串,flag)表示按正则匹配规则替换字符串中的字符

import re
#把以139开头的电话换为138开头
res=re.sub('139.{8}',lambda x:f'138{x.group()[3:]}','13914011111 13812311111 13915111111')
print(res)
<<<13814011111 13812311111 13815111111

re.finditer(正则字符,字符串,flag)表示返回匹配值match对象的的迭代器

import re
#匹配以139开头的手机号码
res=re.finditer('139.{8}','13914011111 13812311111 13915111111')
print(res.__next__())
print(res.__next__())
<<<<re.Match object; span=(0, 11), match='13914011111'>
<<<<re.Match object; span=(24, 35), match='13915111111'>

re.compile(正则字符)表示将正则表达式传给变量

import re
a=re.compile('[a-z]+')
print(a.findall('adsds1223fd?.dsas23'))
<<<['adsds', 'fd', 'dsas']

3.group的使用

在正则表达式中group表示分组,group需要与match对象一起使用,()括起来的正则字符表示分为一组,可以通过group函数查看组内的字符

import re
res=re.search('(139)-(.{8})','139-14011111')
#查看第一组的字符
print(res.group(1))
#查看第二组的字符
print(res.group(2))
#查看匹配的字符
print(res.group())
#查看所有组的字符
print(res.groups())

<<<139
<<<14011111
<<<139-14011111
<<<('139', '14011111')

4.贪婪匹配与惰性匹配

贪婪匹配表示尽可能匹配多的内容(默认),惰性匹配表示尽可能匹配少的内容

import re
res=re.findall('.+','1234567')
print(res)
<<<['1234567']

#切换惰性匹配时,需要在匹配式最后加上?
res=re.findall('.+?','1234567')
print(res)
<<<['1', '2', '3', '4', '5', '6', '7']

5.其他注意事项

在非返回match对象的一些函数中()表示只输出括号中匹配的内容(匹配边界),若一组正则字符中出现多个()会将一次匹配到的内容放入一个元组中

import re
res=re.findall('12(34)','1234')
print(res)
<<<['34']

import re
res=re.findall('12(3)(4)','1234')
print(res)
<<<[('3', '4')]

当正则字符中出现小括号时,默认会被当做匹配边界,如果你想让其保持小括号的意思时,需要在(后加?:

import re
res=re.findall('123(4|5)','1234 1235')
print(res)
<<<['4', '5']

import re
res=re.findall('123(?:4|5)','1234 1235')
print(res)
<<<['1234', '1235']

在正则字符传入python解释器的过程中会经历两次转义过程,第一次是作为python字符串的转义,第二次是作为正则字符的转义,例如‘12\b’python会把字符转义为’12\x08’(\x08表示退格)传给正则模块,然后正则模块匹配’12\x08’。
现在我想让正则表达式成功匹配到‘\c(1)'这个字符串,可以如何写正则字符呢?

import re
a=‘\c(1)'
#给字符串前面加r以后python就不会对字符串进行转义
#方式一
res=re.findall(r'\\c\(1\)',a)
print(res)
<<<['\\c(1)']#输出时windows会将\c转义为\\c
#解释:python将'\\c\(1\)'传给正则模块,正则模块把\\c、\(和\)转义为\c、(和)

#方式二
res=re.findall(r'\\\c\\(1\\)',a)
print(res)
<<<['\\c(1)']
#解释:python将\\转义为\以后把'\\c\(1\)'传给正则模块,正则模块把\\c、\(和\)转义为\c、(和)

注意点:正则表达式中匹配 \需要在表达式中写\ \

二、os和sys

1.os

在这里插入图片描述
在这里插入图片描述
os.getpid()表示获取pid号
os.getppid()表示获取父进程pid号

2.sys

sys.argv()返回列表,列表里是用户在终端传入的参数(例如用户在终端运行python 输入 python3 a.py 123 456,123和456两个参数会被传入argv)
sys.setrecursionlimit(n)表示设置最大递归深度为n
sys.path表示导入模块的路径

三、subprocess

subprocess模块可以使用python控制终端窗口

import subprocess
#tasklist为windows的终端命令,表示产看进程信息
#stdout和stderr表示终端返回的正确信息和错误信息
#subprocess.PIPE表示管道,正确信息和错误信息会通过管道传给subprocess模块
#运行subprocess.Popen会产生一个子进程,而res.stdout.read()会等待子进程运行结束并返回终端正常执行命令以后的结果
res=subprocess.Popen('tasklist',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
b=res.stdout.read()
print(b.decode('gbk'))

四、打印进度条

import time

def make_progress(percent,width=50):
    if percent > 1:percent=1
    #在%的格式化字符中表示%需写为%%,
    show_str=('[%%-%ds]' % width) % (int(percent * width) * '#')
    print('\r%s %s%%' %(show_str,int(percent * 100)),end='')

total_size=10240
recv_size=0
while recv_size < total_size:
    time.sleep(0.5) # 模拟经过了0.5的网络延迟下载了1024个字节
    recv_size+=1024
    # 调用打印进度条的功能去打印进度条
    percent=recv_size / total_size
    make_progress(percent)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Springboot企业员工人事管理系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

研一上课计划2024/9/23有感

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、需要认真上课的1.应用数理统计&#xff08;开卷考试&#xff09;2.最优化方法&#xff08;开卷考试&#xff09;3.跨文化交际&#xff08;主题演讲20课堂讨…

基于SpringBoot和Vue的餐饮管理系统

基于springbootvue实现的餐饮管理系统 &#xff08;源码L文ppt&#xff09;4-078 第4章 系统设计 4.1 总体功能设计 一般个人用户和管理者都需要登录才能进入餐饮管理系统&#xff0c;使用者登录时会在后台判断使用的权限类型&#xff0c;包括一般使用者和管理者,一…

手写SpringMVC(简易版)

在上一篇博客中说到这里我们要进行手写SpringMVC&#xff0c;因此最好是将上一篇博客中的SpringMVC源码分析那一块部分搞懂&#xff0c;或者观看动力节点老杜的SpringMVC源码分析再来看这里的书写框架。 首先我们要知道对于一个完整系统的参与者&#xff08;即一个完整的web项…

Spring Cloud :Hystrix实现优雅的服务容错

目录 Hystrix概述&#xff1a;第一个Hystrix程序步骤1&#xff1a;创建父工程hystrix-1步骤2&#xff1a;改造服务提供者步骤3&#xff1a;改造服务消费者为Hystrix客户端&#xff08;1&#xff09;添加Hystrix依赖&#xff08;2&#xff09;添加EnableHystrix注解&#xff08;…

共享单车轨迹数据分析:以厦门市共享单车数据为例(六)

副标题&#xff1a;.基于POI数据的站点功能混合度探究——以厦门市为例 为了保证数据时间尺度上的一致性&#xff0c;我们从互联网上下载了2020年的POI数据&#xff0c;POI数据来源于高德地图 API平台,包括名称、大小类、地理坐标等。并将高德地图 POI数据的火星坐标 系 GCJ-0…

轻松搭建企业报修平台,零代码解决方案

在当今竞争激烈的商业环境中&#xff0c;企业的高效运营离不开稳定的设备和设施。而当设备出现故障时&#xff0c;一个高效的维修报修平台就显得至关重要。那么&#xff0c;如何零代码搭建企业内部维修报修平台呢&#xff1f; 一、明确需求与目标 在搭建维修报修平台之前&…

Apache APISIX学习(2):安装Grafana、prometheus

一、Grafana安装 1、介绍 Grafana 是一个监控仪表系统&#xff0c;它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度&#xff0c;你只需要提供你需要监控的数据&#xff0c;它就可以帮你生成各种可视化仪表。同时它…

day01——通过git进行管理项目

新建仓库 IDEA新建本地仓库&#xff0c;并上传本地代码将代码上传到远程仓库 不同版本的idea&#xff0c;方式不同&#xff0c;自行摸索

鸿蒙界面开发——组件(10):单选框Radio复选框checkbox 下拉框select 多条件筛选Filter

单选框Radio 单选框一直会有这个圆圈&#xff0c;在选中和未选中之间切换状态。 Radio通过调用接口来创建&#xff0c;接口调用形式如下&#xff1a; Radio(options: RadioOptions) Radio(options: {value: string, group: string ,indicatorType:RadioIndicatorType,(新增) …

基于SSM的家政服务网站【附源码】

基于SSM的家政服务网站&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2 系统结构 4.3. 数据库设计 4.3.1 数据库实体 4.3.2 数据库设计表 4.4 数据表 第5章 系统详细设计 5.1管理员功能模块 5.2用户功能模块 5.3前…

STM32F407单片机编程入门(二十四) USB口介绍及CDC类虚拟串口通讯详解及源码

文章目录 一.概要二.USB2.0基本介绍及虚拟串口介绍三.STM32F407VET6单片机USB模块框图四.STM32单片机USB从机模式五.STM32F407VET6 USB设备CDC类六.CubeMX配置一个USB虚拟串口收发例程七.CubeMX工程源代码下载八.小结 一.概要 STM32F407VET6 USB虚拟串口是一种采用STM32F407VE…

【测试】什么是需求?

测试的概念&#xff1a;验证软件的特性是否满足用户的需求。软件测试领域&#xff1a;软件测试工程师、软件测试开发工程师 需求的概念 在企业中&#xff0c;经常会听到俩个词&#xff1a;用户需求和软件需求。 例如&#xff1a;开发人员与产品人员出现冲突... 产品同学要求开…

ROG NUC:重塑未来,从“芯”开始

ROG NUC以令人惊叹的紧凑身形、强大配置&#xff0c;从“芯”出发&#xff0c;重塑我们对科技生活的想象&#xff0c;让玩家感受由微缩主机带来的性能风暴。 至强“芯”脏&#xff0c;性能巅峰 ROG NUC至高搭载英特尔酷睿Ultra9处理器&#xff0c;采用先进的制程工艺&#xff…

【C++】STL详解之string类

目录 什么是STL STL的版本 STL的六大组件 STL的缺陷 一.string的定义方式 二. string的插入 1.使用push_back进行尾插 2.使用insert插入 三.string的拼接 四.string的删除 1.使用pop_back进行尾删 2.使用erase进行删除 五.string的查找 1.使用find正向搜索第一个…

设计模式 策略模式(Strategy Pattern)

策略模式简绍 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它使你能在运行时改变对象的行为。该模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以相互替换。策略模式让算法独立于使用它的客户而变化。 …

【计网】从零开始掌握序列化 --- 实现网络计算器项目

​​​请各位保持头脑清醒&#xff0c; ​​​读些好书&#xff0c;做点有用的事&#xff0c; ​​​快快乐乐地生活。 ​​​ --- 斯蒂芬金 《肖申克的救赎》--- 从零开始掌握序列化 1 知识回顾2 服务器框架3 客户端框架4 运行测试 1 知识回顾 前面两篇文章学习中基础知识…

CSS 实现文本溢出省略号显示,含单行与多行文本溢出

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

[翟旭发射器]python-推导式-列表list表达式练习

# 简单的列表生成 numbers00[x for x in range(1,11)] print(numbers00) # 带条件的列表生成 numbers01[x for x in range(1,11) if x%20] print(numbers01) # 带表达式的列表生成 numbers10[x**2 for x in range(1,11)] print(numbers10) # 嵌套循环的列表生成 coordinates[(x…

UE4_Niagara基础实例—使用自定义参数

实现的功能&#xff1a;使用自定义的参数来调整粒子远离发射器后粒子大小的变化 效果图&#xff1a; 操作步骤&#xff1a; 1、创建Niagara系统&#xff0c;使用Simple Sprite Burst模板作为新系统的发射器&#xff0c;更名为NS_Custompara。 2、双击打开Niagara系统编辑界面…