Python从0到POC编写--模块(二)

RE模块:

re 正则表达式模块,这个大家应该都比较熟悉。

语法:

复制代码
re.match(pattern, string, flags=0)

其中:

pattern 是匹配的正则表达式

string 是要匹配的字符串。

flags 是标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。


正则表达式:

单字符匹配规则:

字符 功能
.(点) 匹配任意1个字符(除了\n)
\[\] 匹配\[\]中列举的字符
\d 匹配数字,0-9
\D 匹配非数字,也就是匹配不是数字的字符
\s 匹配空白符,也就是 空格\tab
\S 匹配非空白符,跟 \s 相反
\w 匹配数字、字母、下划线, a-z, A-Z, 0-9, _
\W 匹配非数字、字母、下划线

数量匹配规则:

字符 功能
* 匹配0次或者多次,可有可无
+ 匹配至少1次
? 匹配1次或者0次,要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,} 匹配前一个字符至少出现m次
{m,n} 匹配前一个字符出现m到n次

边界符:

字符 功能
^ 匹配字符串开头
$ 匹配字符串结尾
\b 表示字母数字与非字母数字的边界
\B 表示字母数字与(非非)字母数字的边界

常用函数:

方法/属性 作用
re.match(pattern, string, flags=0) 从字符串的起始位置匹配,如果起始位置匹配不成功的话,就返回none
re.search(pattern, string, flags=0) 扫描整个字符串并返回第一个成功的匹配
re.findall(pattern, string, flags=0) 匹配的所有字符串,并把他们作为一个列表返回
re.finditer(pattern, string, flags=0) 表示字母数字与(非非)字母数字的边界
re.sub(pattern, repl, string, count=0, flags=0) 替换匹配到的字符串

参数:

pattern : 匹配的正则表达式。

string : 要匹配的字符串。

flags : 用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

repl : 替换的字符串,也可作为一个函数。

count : 模式匹配后替换的最大次数,默认0表示替换所有匹配。


例1:

复制代码
>>> import re
>>> r = re.match('www','www.baidu.com')
>>> print(r)
>>> # 输出 <re.Match object; span=(0, 3), match='www'>  span=(0, 3) 表示 匹配到的字符在0-3位,但不包含3
# 也可以 
>>> r = re.match('www','www.baidu.com').span()
>>> # 输出 (0,3)

例2:

复制代码
>>> import re
>>> r = re.search('www','www.baidu.com').span()
>>> print(r)
>>> # 输出 (0, 3) 
>>> r = re.search('com','www.baidu.com').span()
>>> # 输出 (10,13)

例3:

复制代码
>>> import re
>>> r = re.findall('\d','w1w2w.ba3id4u.co5m')  # \d 匹配数字
>>> print(r)
>>> # 输出 ['1', '2', '3', '4', '5']

例4:

语法: re.sub(要匹配的字符串,要替换的字符串,查找的值)

复制代码
>>> import re
>>> url1 = 'www.baidu.com'   # 查找的值
>>> url2 = 'www.taobao.com'  # 要替换的字符串
>>> r = re.sub('www.baidu.com',url2,url1)
>>> print(r)
>>> # 输出 www.taobao.com 百度被替换成了淘宝

os模块

os 是一个获取和处理文件,目录 的模块,

下面列举一些比较常用的方法。


os.access() 查看文件是否有指定权限,有则返回True否则返回flase

语法: os.access(path, mode)

path 文件路径

mode 参数有:

F_OK (是否存在)

R_OK (可读)

W_OK (可写)

X_OK (可执行)


例:

复制代码
>>> import os
>>> r = os.access('/python/test.py',os.F_OK)  #  判断文件是否存在
>>> print(r)
>>> # 输出 True

os.getcwd() 获取当前目录,即当前python脚本工作的目录路径

例:

复制代码
>>> import os
>>> r = os.getcwd()  #  获取路径
>>> print(r)
>>> # 输出 C:\Users\administrator\Desktop

os.listdir() 获取指定目录下文件和目录的名称,跟 dir 命令一样

例:

复制代码
>>> import os
>>> r = os.listdir('C:/')  #  获取目录和文件名
>>> print(r)

os.chdir() 切换工作目录到指定的路径下,成功返回True,失败返回False

例:

复制代码
>>> import os
>>> r = os.chdir('../')  #  切换到上一级目录
>>> print(r)

os.mkdir(path, mode=511)

创建一个目录,并指定访问权限,在windows平台下, mode参数将会被忽略

默认的访问权限为 511,表示8进制的 0o777,即拥有者,用户组和其他用户均具有读、写和执行的权限。

例:

复制代码
>>> import os
>>> r = os.mkdir('D:/test')  #  在D盘下创建一个test的目录
>>> print(r)

os.makedirs(name, mode=511, exist_ok=False)

递归地创建目录并设置访问权限,类似于linux中的 mkdir -p

权限跟上面一样

例:

复制代码
>>> import os
>>> r = os.makedirs('D:/test/test')  #  在D盘下创建一个test的目录,然后在test目录再创建一个test目录
>>> print(r)

os.rmdir(path)

删除指定的目录,若目录非空及里面有文件,则抛出OSError异常。

复制代码
>>> import os
>>> r = os.rmdir('D:/test')  #  删除D盘下的test目录
>>> print(r)

os.removedirs(path)

递归删除指定的目录。

若指定的是一个文件,则引发 NotADirectoryError 异常

若指定的目录不为空,则引发OSError异常。

例:

复制代码
>>> import os
>>> r = os.removedirs('D:/test/test')  #  递归删除在D盘下的两个test目录
>>> print(r)

os.remove(path)

删除指定的文件。若 path 为一个目录,则引 PermissionError 异常

例:

复制代码
>>> import os
>>> r = os.remove('D:/test.txt')  #  删除在D盘下的test.txt文件
>>> print(r)

os.rename(src, dst)

重命名文件或目录,如果dst是一个存在的目录, 将抛出OSError。

src -- 要修改的目录名

dst -- 修改后的目录名

例:

复制代码
>>> import os
>>> r = os.rename('D:/test','D:/test2')  #  将D盘下的test目录重命名为test2
>>> print(r)

os.chown(path, uid, gid)

用于更改文件所有者,如果不修改可以设置为 -1

path -- 设置权限的文件路径

uid -- 所属用户 ID

gid -- 所属用户组 ID

例如:

复制代码
>>> import os
>>> r = os.chown('test.txt',0,0) # 设置文件的UID为0,root用户,GID为0,root组
>>> print(r)

os.system("bash command")

运行shell命令,直接显示

例如:

复制代码
>>> import os
>>> r = os.system('dir')  # 执行 dir 命令 
>>> print(r)

os.chmod(path, mode)

用于更改文件或目录的权限

mode 参数有如下:

选项 说明
stat.S_IXOTH 其他用户有执行权 0o001
stat.S_IWOTH 其他用户有写权限 0o002
stat.S_IROTH 其他用户有读权限 0o004
stat.S_IRWXO 其他用户有全部权限(权限掩码) 0o007
stat.S_IXGRP 组用户有执行权限 0o010
stat.S_IWGRP 组用户有写权限 0o020
stat.S_IRGRP 组用户有读权限 0o040
stat.S_IRWXG 组用户有全部权限(权限掩码) 0o070
stat.S_IXUSR 拥有者具有执行权限 0o100
stat.S_IWUSR 拥有者具有写权限 0o200
stat.S_IRUSR 拥有者具有读权限 0o400
stat.S_IRWXU 拥有者有全部权限(权限掩码) 0o700
stat.S_ISVTX 目录里文件目录只有拥有者才可删除更改 0o1000
stat.S_ISGID 执行此文件其进程有效组为文件所在组 0o2000
stat.S_ISUID 执行此文件其进程有效用户为文件所有者 0o4000
stat.S_IREAD windows下设为只读
stat.S_IWRITE windows下取消只读

例如:

复制代码
>>> import os
>>> r = chmod("D:/test.txt", stat.S_IWOTH)  # 设置文件可以被其他用户写入
>>> print(r)

os 模块就写这么多吧!


sys模块:

之前也有提到这个模块

sys.argv 接收命令行参数,生成一个List,第一个元素是程序本身路径

例如:

复制代码
>>> test.py https://www.baidu.com/ 
>>> import sys
>>> r = sys.argv[0]  # 获取脚本名
>>> print(r)  # 输出 test
>>> r2 = sys.argv[1]  # 获取第一个参数
>>> print(r2)  # 输出 https://www.baidu.com/

shell:

python执行shell命令有几个方法

1. os.system()

前面有提到过这种方法。

语法: os.system("command")

例如:

复制代码
>>> import os
>>> r = os.system('dir')  # 执行 dir 命令 
>>> print(r)

2. os.popen(command,mode)

通过 os.popen() 返回的是 file read 的对象,

对其进行读取 read() 的操作可以看到执行的输出。但是无法读取程序执行的返回值

例如:

复制代码
>>> import os
>>> r = os.popen('dir')  # 执行 dir 命令 
>>> print(r.read())

需要使用 read() 方法


3. subprocess 模块

使用 subprocess 模块的 getoutput 方法,

主要方法:

subprocess.getstatusoutput(cmd) 返回(status, output)

subprocess.getoutput(cmd) 只返回输出结果

subprocess.getstatus(file) 返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方

例如:

复制代码
>>> import subprocess
>>> r = subprocess.getstatusoutput('dir')  # 执行 dir 命令 
>>> print(r)
>>> (0, '-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log') 
相关推荐
DeepVisionary4 分钟前
从 Qwen3.8-27B 把原生多模态、原生 FP8、桌面级 Agent 三件事一次集齐,看开源大模型的“工业化拐点“
python·自动化
固定资产管理系统软件1 小时前
商务局RFID固定资产管理系统的应用价值与落地要点解析
大数据·python
码农颜1 小时前
6.3 主函数流程剖析
开发语言·php
TheBestRucy2 小时前
Python 九阳神功:从零筑基到线程飞升
服务器·开发语言·网络·人工智能·python
lancyu2 小时前
关于多轮对话机器人的上下文Token优化和解决方案
人工智能·python·深度学习·机器学习·chatgpt·机器人·prompt
草莓橙子碗3 小时前
Claude 使用指南
开发语言·python
工具分享3 小时前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI3 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
老郑聊AI业财智造3 小时前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程
程序员三藏3 小时前
自动化测试用例编写详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例