首页 > 编程语言 >python常用模块

python常用模块

时间:2024-12-24 22:42:57浏览次数:5  
标签:常用 匹配 python py re 模块 print shutil os

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’,‘3ds \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以后,正则对象会得到保留,这样在需要多次运用这个正则对象的时候,效率会有较大的提升

    import re
    trace_message = "<idle>-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)            # <re.Match object; span=(0, 74), match='<idle>-0     (-----) [004] .... 2628922.673375: c>
    match='cpu_idle'
    
  • search(pattern, string[, flags]) 和 match(pattern, string[, flags])

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

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

    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)                                        # <re.Match object; span=(99, 105), match='camera'>
    match='camera'
    print(c.group())                                # camera
    
  • split(pattern, string[, maxsplit=0])

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

    代码实例:

    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 方法能够以列表的形式返回能匹配的子串

    import re
    pattern = r'^(.*?)\s+\((.*?)\)\s+\[(.*?)\]\s+\.\.\.\.\s(.*?):\s+(.*?)$'
    trace_str = "<idle>-0     (-----) [004] .... 2628922.673375: cpu_idle: state=0 cpu_id=4"
    match = re.findall(pattern, trace_str)
    print(match)
    # 输出结果:[('<idle>-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模块

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表示打开的文件对象。

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

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

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

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

    >>> 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)状态复制

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

    >>> 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。

    >>> 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。

    >>> 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()递归复制

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

    >>> 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再当前目录移动;若目标已经存在且不是目录,则可能会被覆盖。

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

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

    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为归档的目录

    >>> 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) 从序列中随机获取指定长度的片断
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 ↩︎

标签:常用,匹配,python,py,re,模块,print,shutil,os
From: https://www.cnblogs.com/2678066103hs/p/18628840

相关文章

  • 零基础创建一个可以对话的人工智能,保姆级教学,提供了完整可运行的代码,感兴趣但不会pyt
    目录前言:这里提到了2种类型的对话AI教学,请根据目录按照个人情况学习     注意:本文分为2种类型的对话AI教学,分别如下:    一:调用API型    通俗解释:    专业解释:    二:自行训练模型型(更进一步开发AI)        解......
  • 华为机试:仿 LISP 运算 - Python实现
    华为机试:仿LISP运算_仿lisp运算华为机试-CSDN博客https://blog.csdn.net/weixin_44052055/article/details/125902077看到这一篇博文,感觉这个题目挺有意思的. 今天也做一个Python版本的.后面可能会逐步把它实现成一个Lisp解释器.importre#解析字符串(源代码),生成......
  • 【Python项目】用pywin32在聊天窗口发送QQ好友/群消息
    源码中涉及到的函数用法:win32clipboard.SetClipboardData(format,hMem):它需要一个格式化的数据对象和一个数据块。CF_DIB——DIB图片,它包含一个BITMAPINFO结构,然后是位图位。CF_DIF——软件领域的数据交换格式。CF_PALETTE——调色板。每当应用程序放置数据在剪贴板......
  • 【python量化教程】如何使用必盈股票API接口,获取最新实时交易数据
      一篇文章教会什么是股票量化分析   股票API接口作为一种应用程序编程接口,犹如在股票数据的提供者与使用者之间架起的一座沟通桥梁。股票市场环境错综复杂,其中蕴含着海量数据,例如股票实时价格、历史价格变动轨迹以及成交量等信息。借助股票API接口,有获取数据需......
  • Python+Vue3+Django银行信用卡额度管理系统的设计与实现
    文章目录具体实现截图项目介绍和开发技术介绍开发技术核心代码部分展示项目结构分析文章目录/写作提纲参考源码/演示视频获取方式具体实现截图项目介绍和开发技术介绍创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、......
  • Python+Vue3+Django新闻发布管理系统设计与实现
    文章目录具体实现截图项目介绍和开发技术介绍开发技术核心代码部分展示项目结构分析文章目录/写作提纲参考源码/演示视频获取方式具体实现截图项目介绍和开发技术介绍创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、......
  • 医院食堂订餐系统Python+Vue3+Django(Pycharm毕业设计 mysql)
    文章目录具体实现截图项目介绍和开发技术介绍开发技术核心代码部分展示项目结构分析文章目录/写作提纲参考源码/演示视频获取方式具体实现截图项目介绍和开发技术介绍创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、快......
  • 无线通信电路的基本模块
    无线通信总是环绕在我们的身边,无处不在。今天我来简单描述一下无线通信电路的基本内容:无线通信电路分为信号接收电路和信号发射电路;接收电路主要由将天线接收的微弱信号放大的LNA(低噪声放大器),将信号降频至基带区域的混频器,滤掉不需要的信号的滤波器,以及AD转换器(模拟数字......
  • nodepadd++ run python script
    原文链接:[https://www.quora.com/Can-you-run-Python-in-Notepad]Firstoption:(Easiest,recommended)OpenNotepad++.Onthemenugoto:Run->Run..(F5).Typein:C:\Python26\python.exe"$(FULL_CURRENT_PATH)"Now,insteadofpressingrun,press......
  • python query oracle database
    oraclesqlscript:droptableIFEXISTSGEOVINDU.School;createtableGEOVINDU.School--創建表(SchoolIdchar(5)NOTNULL,--SchoolNamevarchar(500)NOTNULL,SchoolTelNovarchar(8)NULL,PRIMARYKEY(SchoolId)--#主鍵);......