前言:
模块第二篇。
目录:
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')
总结:
模块第二篇!!