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

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 timedef 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_sizemake_progress(percent)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python机器学习】NLP信息提取——提取人物/事物关系

目录 词性标注 实体名称标准化 实体关系标准化和提取 单词模式 文本分割 断句 断句的方式 使用正则表达式进行断句 词性标注 词性&#xff08;POS&#xff09;标注可以使用语言模型来完成&#xff0c;这个语言模型包含词及其所有可能词性组成的字典。然后&#xff0c;该…

http增删改查四种请求方式操纵数据库

注意&#xff1a;在manage.py项目入口文件中的路由配置里&#xff0c;返回响应的 return语句后面的代码不会执行&#xff0c;所以路由配置中每个模块代码要想都执行&#xff0c;不能出现return 激活虚拟环境&#xff1a;venv(我的虚拟环境名称&#xff09;\Scripts\activate …

java项目发布后到Tomcat时,总是带一层路径解决方案

java项目发布后到Tomcat时,总是带一层路径 参考文章&#xff1a;java 线上项目访问项目 会多一层项目根路径 根据参考文章写的这篇文章&#xff0c;部分文章细节有完善和改动 在Java Web应用中&#xff0c;当你把应用发布到Tomcat时&#xff0c;如果应用的web.xml配置文件中的&…

Karmada新版本发布,支持联邦应用跨集群滚动升级

摘要&#xff1a;本次升级支持联邦应用跨集群滚动升级&#xff0c;使用户版本发布流程更加灵活可控&#xff1b;透明同事karmadactl 新增了多项运维能力&#xff0c;提供独特的多集群运维体验。 本文分享自华为云社区 《Karmada v1.11 版本发布&#xff01;新增应用跨集群滚动升…

柔性数组 初学版

1.定义 结构中的最后⼀个元素允许是未知⼤⼩的数组&#xff0c;这就叫做『柔性数组』成员 有些编译器会报错⽆法编译可以改成&#xff1a; typedef struct st_type { int i; int a[]; // 柔性数组成员 }type_a; 2.柔性数组的特点&#xff1a; • 结构中的柔性数组成员前…

ReadWriteLock读写锁

读写锁基本概念 ReadWriteLock是Java并发包中的一个接口&#xff0c;它定义了两种锁&#xff1a;读锁&#xff08;Read Lock&#xff09;和写锁&#xff08;Write Lock&#xff09;&#xff0c;真正的实现类是ReentrantReadWriteLock。读锁允许多个线程同时读取共享资源&#…

JAVA开源项目 体育馆管理系统 计算机毕业设计

本文项目编号 T 048 &#xff0c;文末自助获取源码 \color{red}{T048&#xff0c;文末自助获取源码} T048&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

记一次Mac 匪夷所思终端常用网络命令恢复记录

一天莫名奇妙发现ping dig 等基础命令都无法正常使用。还好能浏览器能正常访问&#xff0c;&#xff0c;&#xff0c;&#xff0c; 赶紧拿baidu试试^-^ ; <<>> DiG 9.10.6 <<>> baidu.com ;; global options: cmd ;; connection timed out; no serve…

美业门店怎么提升业绩?连锁美业门店管理系统收银系统拓客系统源码

美业门店想要提升业绩&#xff0c;需要考虑多方面的因素&#xff0c;并采取综合性的方法。以下是一些可以考虑的因素和建议&#xff1a; 产品与服务优化&#xff1a; 提供高质量的美容产品和服务&#xff0c;确保顾客满意度。不断更新产品线&#xff0c;引入新的时尚趋势&#…

pycharm 使用 translation 插件通过openai进行翻译

pycharm 使用 translation 插件通过openai进行翻译 1. 安装插件2. 配置插件3. 翻译 1. 安装插件 2. 配置插件 3. 翻译 调用 openai 时使用的提示词如下&#xff1a; <|im_start|>system\nYou are a translation engine that can only translate text and cannot interpr…

【大模型实战篇】一种关于大模型高质量数据的处理方法-无标注数据类别快速识别及重复数据检测(加权向量-卷积神经网络-聚类算法结合)

1. 背景介绍 大模型的能力很大程度上依赖于高质量的数据&#xff0c;在之前的一篇文章《高质量数据过滤及一种BoostedBaggingFilter处理方法的介绍》中&#xff0c;我们介绍了大模型的数据处理链路&#xff0c;本文继续关注在高质量数据的模块。 本文所要介绍的处理方法&…

第18届全国热管会议举办,积鼎科技分享「环路热管相变传热仿真」前沿实践

第18届全国热管会议于9月20日至22日在海滨城市日照举行&#xff0c;该会议由中国工程热物理学会热管专业组主办&#xff0c;山东大学和日照市科学技术协会联合承办&#xff0c;汇聚了全国热管技术领域的专家学者及企业代表。在该会议上&#xff0c;积鼎科技在热管仿真方面的成果…

移动剧院:流动艺术空间的声学革命—轻空间

在当今多元化的文化环境中&#xff0c;移动剧院作为一种新兴的演出形式&#xff0c;正在迅速崛起。它不仅提供了灵活多变的演出场地&#xff0c;更以其卓越的声学性能&#xff0c;为观众带来了沉浸式的视听体验。移动剧院的声学优势&#xff0c;使其成为各种艺术活动的理想选择…

TomCat乱码问题

TomCat控制台乱码问题 乱码问题解决&#xff1a; 响应乱码问题 向客户端响应数据&#xff1a; package Servlet;import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servl…

C++中的IO流

1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据&#xff0c;并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲…

DELPHI编译软件时带上当前IDE的版本号

如果通过 CompilerVersion 得到的也只是编译器的版本号。 比如&#xff1a;delphi XE12 是 36 &#xff0c;也仅此而己。 我想得到的是IDE的版本号&#xff0c;比如当前最新版本的DELPHI是&#xff1a;Embarcadero RAD Studio 12 Version 29.0.53571.9782 我想得到 29.0.53…

轰!天文学家刚刚目睹了三年来最大的太空爆炸

天文学家目睹了太空中最大的一次爆炸。 被标记为 AT2021lwx 的这次爆炸事件被观测到比任何已知的超新星都要亮十倍&#xff0c;超新星爆炸发生在大质量恒星死亡之时。而且超新星爆炸只持续几个月&#xff0c;而这次爆炸事件已经持续了至少三年。 AT2021lwx 也比恒星被超大质量…

聊一下cookie,session,token的区别

cookie cookie是存放在客户端的,主要用于会话管理和用户数据保存;cookie通过http报文的请求头部分发送给服务器,服务器根据cookie就可以获取到里面携带的session id(用于获取服务器中对应的session数据),因为http是无状态协议,我们通常就是通过cookie去维护状态的 cookie是在…

LabVIEW提高开发效率技巧----使用状态机架构

状态机架构&#xff08;State Machine Architecture&#xff09;是LabVIEW编程中的一种常见且高效的设计模式&#xff0c;特别适合用于处理具有多个操作状态的复杂系统。通过这种架构&#xff0c;程序能够根据不同的输入条件或事件&#xff0c;在多个状态之间切换&#xff0c;从…

守护您的数字世界:IObit Malware Fighter 11 PRO,您的全能电脑卫士

在这个数字化时代&#xff0c;我们的电脑和个人数据面临着前所未有的威胁。病毒、恶意软件、黑客攻击&#xff0c;这些词汇听起来或许遥远&#xff0c;但它们无时无刻不在威胁着我们的网络安全。幸运的是&#xff0c;IObit Malware Fighter 11 PRO&#xff0c;这款屡获殊荣的杀…