python常用模块

re模块

正则表达式符号:

表达符号 说明
. 匹配所有字符串,除\n以外
- 表示范围[0-9]
* 1.匹配前面的子表达式零次或多次,匹配前面的字符0次或多次
2.re.findall(“ab*”,“cabc3abcbbac”)结果:[‘ab’, ‘ab’, ‘a’]
+ 匹配前面的子表达式一次或多次
^ 匹配字符串开头
$ 匹配字符串结尾
\ 转义字符,可以将其他有特殊意义的字符串以原本意思表示,要匹配 字符,请使用
匹配前一个字符串0次或1次
re.findall(‘ab?’,‘abcabcabcadf’)结果[‘ab’, ‘ab’, ‘ab’, ‘a’]
匹配前一个字符m次
re.findall(‘cb{1}’,‘bchbchcbfbcbb’)结果[‘cb’, ‘cb’]
匹配前一个字符n到m次
re.findall(‘cb{2,3}’,‘bchbchcbfbcbb’)结果[‘cbb’]
\d 匹配数字,等于[0-9]
re.findall(‘\d’,‘电话:10086’)结果[‘1’, ‘0’, ‘0’, ‘8’, ‘6’]
\D 匹配非数字,等于[^0-9]
re.findall(‘\D’,‘电话:10086’)结果[‘电’, ‘话’, ‘:’]
\w 匹配字母和数字,等于[A-Za-z0-9]
re.findall(‘\w’,‘alex123,./;;;’)结果[‘a’, ‘l’, ‘e’, ‘x’, ‘1’, ‘2’, ‘3’]
\W 匹配非英文字母和数字,等于[^A-Za-z0-9]
re.findall(‘\W’,‘alex123,./;;;’)结果[‘,’, ‘.’, ‘/’, ‘;’, ‘;’, ‘;’]
\s 匹配空白字符
re.findall(‘\s’,‘3*ds \t\n’)结果[’ ', ‘\t’, ‘\n’]
\S 匹配非空白字符
re.findall(‘\s’,‘3 ds \t\n’)结果[‘3’, ' ’, ‘d’, ‘s’]
\A 匹配字符串开头
\Z 匹配字符串结尾
\b 匹配单词的词首和词尾,单词被定义为一个字母数字序列,因此词尾是用空白符或非字母数字符来表示的
\B 与\b相反,只在当前位置不在单词边界时匹配
[] 是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s ]表示空格或者 号。

正则表达式注意事项

  • 字符集

作用:使用中括号来括住字符串来创建字符集,字符集可匹配他包括的任意字串
1)‘[pj]ython’ 只能够匹配‘python’ ‘jython’
2) ‘[a-z]’ 能够(按字母顺序)匹配a-z任意一个字符
3)‘[a-zA-Z0-9]’ 能匹配任意一个大小写字母和数字
4)‘[^abc]’ 可以匹配任意除a,b和c 之外的字符串

  • 可选项和重复子模式

作用:在子模式后面加上问号,它就变成可选项,出现或者不出现在匹配字符串中都是合法的,例如:r’(aa)?(bb)?ccddee’ 只能匹配下面几种情况;

    ```
‘aabbccddee’
‘aaccddee’
‘bbccddee’
‘ccddee’
```
  • 字符串的开始和结尾

1) ‘w+’ 匹配以w开通的字符串
2) ‘[1](https://so.csdn.net/so/search?q=http&spm=1001.2101.3001.7020)’ 匹配以’http’ 开头的字符串
3)‘ $com’ 匹配以‘com’结尾的字符串

常用函数

函数 作用
re.compile(pattern[, flags]) 根据正则表达式字符串创建模式对象
re.search(pattern, string[, flags]) 扫描整个字符串并返回第一个成功的匹配
re.match(pattern, string[, flags]) 从字符串的起始位置匹配,如果起始位置匹配不成功的话,match()就返回none
re.findall(pattern, string) 找到RE匹配的所有字符串,并把他们作为一个列表返回
re.split(pattern, string[, maxsplit=0]) split能够按照所能匹配的字串将字符串进行切分,返回切分后的字符串列表
re.finditer(pattern, string, flags=0) 找到RE匹配的所有字符串,并把他们作为一个迭代器返回
re.sub(pattern, repl, string, count=0, flags=0) 替换匹配到的字符串
re.escape(string) 如果字符串中包含了正则表达式的特殊字符,那么就需要使用re.escape函数来对这些特殊字符进行转义,以保证匹配的准确性
  • re.compile(pattern[, flags])

1)把一个正则表达式pattern编译成正则对象,以便可以用正则对象的match和search方法
2)用了re.compile以后,正则对象会得到保留,这样在需要多次运用这个正则对象的时候,效率会有较大的提升

    ```python
import re
trace_message = "-0     (-----) [004] .... 2628922.673375: cpu_idle: state=0 cpu_id=4"
cpu_re = re.compile(r'^(.*?)\s+\((.*?)\)\s+\[(.*?)\]\s+\.\.\.\.\s(.*?):\s+(.*?)$')
ret = re.match(cpu_re,log_message)
print(ret)            # 
  • search(pattern, string[, flags]) 和 match(pattern, string[, flags])

1)match :只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none;
2)search :将字符串的所有字串尝试与正则表达式匹配,如果所有的字串都没有匹配成功,返回none,否则返回matchobject;

match与search使用比较代码实例:

    ```python
import re
a =re.match('.android.camera', '.android.camera-10011 (10011) [007] .... 105371.125644: tracing_mark_write: S|10011|deliverInputEvent|662016339')
b = re.match('deliverInputEvent', '.android.camera-10011 (10011) [007] .... 105371.125644: tracing_mark_write: S|10011|deliverInputEvent|662016339')
print(a.group())                                # .android.camera
print(b)                                        # None

# 无论有多少个匹配的只会匹配一个
c = re.search('camera', '<...>-2994  ( 1347) [002] .... 105367.330952: tracing_mark_write: B|1347|startActivity com.android.camera/.CameraActivity')
print(c)                                        # 
match='camera'
print(c.group())                                # camera
```
  • split(pattern, string[, maxsplit=0])

作用:将字符串以指定分割方式,格式化成列表

代码实例:

    ```python
import re
text = 'xx 0xdd###ccTv-1'
print(re.split('\W+', text))     
print(re.split('\W', text))     
print(re.split('\d', text))     
print(re.split('#', text))     
print(re.split('#+', text))
```
  • findall(pattern, string)

作用:正则表达式 re.findall 方法能够以列表的形式返回能匹配的子串

    ```python
import re
pattern = r'^(.*?)\s+\((.*?)\)\s+\[(.*?)\]\s+\.\.\.\.\s(.*?):\s+(.*?)$'
trace_str = "-0     (-----) [004] .... 2628922.673375: cpu_idle: state=0 cpu_id=4"
match = re.findall(pattern, trace_str)
print(match)
# 输出结果:[('-0', '-----', '004', '2628922.673375', 'cpu_idle: state=0 cpu_id=4')]
```
  • sub(pat, repl, string[, count=0])

1)替换,将string里匹配pattern的部分,用repl替换掉,最多替换count次然后返回替换后的字符串
2)如果string里没有可以匹配pattern的串,将被原封不动地返回
3)repl可以是一个字符串,也可以是一个函数
4) 如果repl是个字符串,则其中的反斜杆会被处理过,比如 \n 会被转成换行符,反斜杆加数字会被替换成相应的组,比如 \6 表示pattern匹配到的第6个组的内容

OS模块

```python
import os
#1.获取当前文件路径
print(os.getcwd())
#2 可生成多层递归目录
os.makedirs(r'C:\data\local') # 可以发现在C盘创建了文件夹\data\local
#3 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.removedirs(r'C:\data\local')    # 删除所有空目录
#4 生成单级目录;相当于shell中mkdir dirname
os.mkdir(r'C:\data')        # 仅能创建单个目录
#5 删除空目录(删除非空目录, 使用shutil.rmtree())
os.rmdir(r'C:\data')        # 仅删除指定的一个空目录
#6 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
print(os.listdir(r'C:\vendor\etc\camera'))
#7 删除一个文件
os.remove(r'C:\vendor\etc\camera\camxoverridesettings.txt')        # camxoverridesettings.txt文件
#8 重命名文件/目录
os.rename(r'C:\vendor\etc\camera\cameracamxoverridesettings.txt',r'C:\vendor\camx\src\core\camxsettings.xml')
#9 获取文件/目录信息
print(os.stat(r'C:\vendor\etc\camera\camxoverridesettings.txt'))
#10 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
print(os.sep)                # \
#11 输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
print(os.linesep)
#12 输出用于分割文件路径的字符串
print(os.pathsep)                # ;  (分号)
#13 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
print(os.name)                # nt
#14 运行shell命令,直接显示
os.system("bash command")
#15 获取系统环境变量
print(os.environ) 
#16 返回path规范化的绝对路径
print(os.path.abspath(r'C:\vendor\etc\camera\camxoverridesettings.txt'))    # C:\vendor\etc\camera\camxoverridesettings.txt
#17 将path分割成目录和文件名二元组返回
print(os.path.split(r'C:\vendor\etc\camera'))    # ('C:\\vendor\\etc', 'camera')
#18 返回path的目录。其实就是os.path.split(path)的第一个元素
print(os.path.dirname(r'C:\vendor\etc\camera'))    # C:\vendor\etc
#19 返回文件路径的文件名部分,如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
print(os.path.basename(r'C:\vendor\etc\camera'))    # camera
#20 如果path存在,返回True;如果path不存在,返回False
print(os.path.exists(r'C:\vendor\etc\camera'))    # True
#21 如果path是绝对路径,返回True        # True
print(os.path.isabs(r"C:\vendor\etc\camera"))
#22 如果path是一个存在的文件,返回True。否则返回False
print(os.path.isfile(r'C:\vendor\etc\camera\camxoverridesettings.txt'))        # True
#23 如果path是一个存在的目录,则返回True。否则返回False
print(os.path.isdir(r'C:\vendor\etc\camera'))            # True
#24 返回path所指向的文件或者目录的最后访问时间,浮点型
print(os.path.getatime(r'C:\vendor\etc\camera\camxoverridesettings.txt'))
#25 返回path所指向的文件或者目录的最后修改时间,浮点型
print(os.path.getmtime(r'C:\vendor\etc\camera\camxoverridesettings.txt'))
```

shutil模块

python的shutil模块可以看做是OS模块的补充,shutil模块用于文件和目录的高级处理,提供了支持文件赋值,移动,删除,压缩和解压缩等功能

复制文件

shutil模块的主要作用是复制文件,实现方式如下:

  • shutil.copyfileobj(file1,file2)覆盖复制

将file1的内容覆盖file2,file1、file2表示打开的文件对象。

    ```python
file1=open('cpu0.py','r') #打开源文件
file2=open('cpu1.py','w') #打开目标文件
shutil.copyfileobj(file1,file2) #文件复制,注意没有返回值
```
  • shutil.copyfile(file1,file2)覆盖复制

也是覆盖,但是无须打开文件,直接用文件名进行覆盖(其源码还是调用的copyfileobj)

    ```python
>>> shutil.copyfile('../cpu0.py','./cpu1.py') #用copyfile复制文件
>>> shutil.copyfile('../cpu0.py','./os/cpu1.py') #目标文件的目录不存在会报错
>>> shutil.copyfile('../cpu.py','./') #dst不是文件而是目录会报错
```
  • shutil.copymode(file1,file2)权限复制

仅复制文件权限,不更改文件内容、组和用户,无返回对象。

    ```python
>>> os.system('chmod 777  ../cpu.py') #用shell指令将源文件的读写属性改变
>>> os.system('ls -l ../cpu.py') #打印源文件的属性为-rwxrwxrwx
>>> shutil.copyfile('../cpu.py','./cpu4.py') #用copyfile来复制文件
>>> os.system('ls -l ./cpu4.py') #打印目标文件属性为-rw-r--r--,和源文件不一样
>>> shutil.copymode('../cpu.py','./cpu4.py')#用copymode来复制文件权限
>>> os.system('ls -l ./cpu4.py') #打印目标文件属性为-rwxrwxrwx,和源文件一样
```
  • shutil.copystart(file1,file2)状态复制

复制文件的所有状态信息,包括权限、组、用户和时间等,无返回对象。

    ```python
>>> shutil.copyfile('../cpu.py','./cpu5.py') #复制文件
>>> os.system('ls -l ../cpu.py') #打印源文件信息
>>> os.system('ls -l ./cpu5.py') #打印目标文件信息,权限和时间和源文件不一样
>>> shutil.copystat('../cpu.py','./cpu5.py') #复制文件stat到目标文件
>>> os.system('ls -l ./cpu5.py') #打印目标文件信息,权限和时间和源文件一样
```
  • shutil.copy(file1,file2)内容和权限复制

复制文件的内容和权限,相当于先执行了copyfile再执行了copysmode。

    ```python
>>> shutil.copy('../cpu.py','./') #复制文件到当前目录,注意dst为目标路径
>>> os.listdir('./') #列出当前目录的文件名信息,cpu.py已创建
>>> shutil.copy('../cpu.py','./cpu2.py') #复制文件并重命名,注意dst为文件名
>>> os.listdir('./') #列出当前目录的文件名信息,cpu2.py已创建
```
  • shutil.copy2(file1,file2)内容和权限复制

复制文件的内容及所有状态信息,相当于先执行了copyfile再执行了copystart。

    ```python
>>> shutil.copy('../cpu.py','./cpu2.py') #用copy来复制文件
>>> time.ctime(os.stat('../cpu.py').st_mtime) #返回源文件修改时间
>>> time.ctime(os.stat('./cpu2.py').st_mtime) #返回目标文件修改时间,和源文件不一样
>>> shutil.copy2('../cpu.py','./cpu3.py') #用copy2来复制文件
>>> time.ctime(os.stat('./cpu3.py').st_mtime) #返回目标文件修改时间,和源文件一样
```
  • shutil.copytree()递归复制

递归地复制文件内容及状态信息

    ```python
>>> shutil.copytree('/kernel/os/cpu','/kernel/os/cpu1',ignore=None,copy_function=shutil.copy)
>>> os.listdir('/kernel/os/cpu1') #列出copy后的文件夹中的文件
>>> shutil.copytree('/home/user/Python','/kernel/os/cpu2',ignore=shutil.ignore_patterns('*.py'),copy_function=shutil.copy2)
'/kernel/os/cpu2'
>>> os.listdir('/kernel/os/cpu2') #copy后的文件名没有"*py"结尾的文件
```

移动文件

使用函数shutil.move()函数可以递归地移动文件或重命名,并返回目标,若目标是现有目录则src再当前目录移动;若目标已经存在且不是目录,则可能会被覆盖。

```python
>>> shutil.move('cpu0.py','cpu1.py') #移动文件
>>> shutil.move('./cpu0','./cpu1') #移动文件夹
```
  • 读取压缩及归档压缩文件

使用函数shutil.make_archive()创建归档文件,并返回归档后的名称。

    ```python
shutil.make_archive(base_name,format[,root_dir[,base_dir[,verbose[,dry_run[,owner[,group[,logger]]]]]]])
```

1)base_name为需要创建的文件名,包括路径
2)format表示压缩格式,可选zip、tar或bztar等
3)root_dir为归档的目录

    ```python
>>> os.listdir()
['cpu0', 'cpu1.py', 'cpu2.py']
>>> shutil.make_archive('./cpu0','zip','./') #压缩文件为zip格式
'/kernel/cpu0.zip'
```

Random 模块

函数 作用
random.random() 产生0-1的随机浮点数
random.uniform(a, b) 产生指定范围内的随机浮点数
random.randint(a, b) 产生指定范围内的随机整数
random.randrange([start], stop[, step]) 从一个指定步长的集合中产生随机数
random.choice(sequence) 从序列中产生一个随机数
random.shuffle(x[, random]) 将一个列表中的元素打乱
random.sample(sequence, k) 从序列中随机获取指定长度的片断
```python
import random
#⒈ 随机整数:
print(random.randint(0,99))             # 随机选取0-99之间的整数
print(random.randrange(0, 101, 2))      # 随机选取0-101之间的偶数
#⒉ 随机浮点数:
print(random.random())                   # 0.972654134347
print(random.uniform(1, 10))             # 4.14709813772
#⒊ 随机字符:
print(random.choice('abcdefg'))         # c
print(random.sample('abcdefghij',3))    # ['j', 'f', 'c']
```

  1. http ↩︎

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4803.html

(0)
LomuLomu
上一篇 2024 年 12 月 29 日 上午1:04
下一篇 2024 年 12 月 29 日 上午1:34

相关推荐

  • 2025新春源码免费送

    我们常常在日常生活中感到时间过得异常缓慢,仿佛未来遥不可及。然而,当我们回过头去审视过去,才发现时间早已悄然溜走,许多曾经等待的日子已经过去。时间总是在不经意间流逝,让人意识到它的宝贵和不可逆转。 尽管如此,我们依然应对未来保持从容的态度。生活充满了无数的可能性,未来依然充满了希望与机会。无论眼前的路看似如何曲折,抑或我们面临的挑战有多大,始终相信自己能够把…

    2025 年 1 月 10 日
    13900
  • PostgreSQL 初始化配置设置

    title: PostgreSQL 初始化配置设置date: 2024/12/27updated: 2024/12/27author: cmdragon excerpt:PostgreSQL是一款广泛应用于企业级应用、数据仓库以及Web应用程序的强大数据库管理系统。在完成数据库的安装后,进行合理而有效的初始配置是确保数据库性能和安全性的关键步骤。Postgr…

    2024 年 12 月 31 日
    11500
  • 【Java 学习】Java抽象类详解:从理论到实践,带你迈向面向对象的深度思考!

    💬 欢迎讨论:如对文章内容有疑问或见解,欢迎在评论区留言,我需要您的帮助! 👍 点赞、收藏与分享:如果这篇文章对您有所帮助,请不吝点赞、收藏或分享,谢谢您的支持! 🚀 传播技术之美:期待您将这篇文章推荐给更多对需要学习Java语言、低代码开发感兴趣的朋友,让我们共同学习、成长! 1. 什么是抽象类? 举一个Animal类、Cat类和Dog类的例子: “`j…

    2025 年 1 月 15 日
    16200
  • 2024年最新MacBook苹果电脑安装JDK8、JDK11、JDK17、JDK22教程,配置环境变量 + 快速切换JDK版本

    本帖发布日期:2024年01月26日,全网最新教程整理。 2024年02月01日更新:环境变量新增jdk17配置代码。 2024年05月13日更新:记录解决添加maven后不能自动切换jdk版本。 2024年06月16日更新:友情提醒:如果是m芯片,推荐下载arm版本。 2024年08月08日更新:新增JDK22版本安装。 2024年11月28日更新:更新排…

    2024 年 12 月 31 日
    29200
  • 3dm 格式详解,javascript加载导出3dm文件示例

    3DM 格式详解 3DM 文件格式是由 Rhinoceros 3D(简称 Rhino)软件使用的原生文件格式。这种格式主要用于存储三维模型,支持多种几何类型和丰富的属性信息。以下是 3DM 文件格式的一些关键特性和结构: 文件结构 文件头 : 文件标识符 (File Signature):用于识别文件是否为 3DM 文件。 文件版本号 (File Versi…

    2025 年 1 月 10 日
    16500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信