Python之模块、正则
一、模块
import 模块的实质就是把要导入模块里面的代码,从上到下执行一遍,找模块的顺序是,先从当前目录下找,找不到的话,再环境变量里面找
导入的模块名字最好不要有.,a.
import sys
print(sys.path)#当前环境变量有哪些,针对python,并不是整个系统
标准模块:
python自带的,不需要安装的,直接import就能用的
自己写的模块:
也就是自己写的python
第三方模块:
别人已经开发好的功能,需要安装的
利用pip python安装目录scripts下有pip命令,要用这个命令就得把scripts目录加入到环境变量
安装方式第一种:
这是操作系统命令,不是在python命令行里面执行
pip install xx 安装某个模块
pip list 查看已经安装的模块
pip uninstall xxx 卸载 模块
pip这个模块,在python3里面是python自带的,安装完python就能直接用,但是在python2里面是没有这个模块的,需要你手动安装才能用
easy_install requests也可以安装,这个也是傻瓜式安装试,python3自带,python2需要手动安装
第二种方式,手动安装:
1.先下载安装包,直接百度搜,比如说python requests 模块
2.解压安装包
3.在解压的目录下执行python setup.py install
2. os模块
import os #导入os模块
print(os.getcwd())
print(os.chdir(r"e"\byz_code\day2")) #更改当前目录
print(os.mkdir(r"test1")) #创建文件夹
print(os.makedirs(r"test1\test2")) # 递归创建文件夹,父目录不存在时创建父目录
print(os.removedirs(r"test1\test2"))#递归删除空目录
print(os.rmdir("test1")) # 删除指定的文件夹,只能删除空文件夹
print(os.remove(r"E:\byz_code\day4\a.txt"))#删除文件
r是代表原字符,代表原样输出,不转义
os.rename("test","test1")#重命名
print(os.sep)#当前操作系统的路径分隔符
print(os.listdir(".")) #列出一个目录下的所有内容
print(__file__)#代表当前文件
print(os.path.abspath('bb.py'))#获取绝对路径
print(os.path.dirname)#获取父目录
print(os.path.dirname(os.path.dirname(__file__)))#获取父目录
print(os.path.exists('hhaaa'))#目录/文件是否存在
print(os.path.isfile('bb.py'))#判断是否是一个文件
print(os.path.isdir("/usr/local"))#是否是一个路径
print(os.path.join("root",'hehe','haha','a.log')) #拼接成一个路径
sys.path.append(r'e:\002\hhaa') 添加环境变量不能写死
sys.path.append(os.path.dirname(__file__)) 把父目录加到环境变量
3.sys模块
import sys #导入sys模块
sys.argv #命令行参数list,第一个元素是程序本身路径
sys.exit('xxx') #退出程序,正常退出时exit(0) xxx为提示信息
sys.version #获取Python解释程序的版本信息
sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform #返回操作系统平台名称
sys.stdout.write('please:') #向屏幕输出一句话
val = sys.stdin.readline()[:-1] #获取输入的值
二、软件开发规范
软件开发规范目录及文件说明
bin:可执行文件,程序入口
conf:放配置文件
core:核心文件
data:数据存储文件
logs:日志文件
README.md:说明文件
目录结构如图所示
import os,sys
path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #当前目录
#sys.path.append(path) #末尾添加,但如果有其它路径中有相同模块,先找到就直接返回,不往下找了,最好用insert放到首位
sys.path.insert(0,path) #放到环境变量首位,避免有相同模块,找不到
#sys.path.pop(0)#删除环境变量
如果目录已经加到环境变量,可以右键Mark Directory as-->Source Root,这样使用的时候会用方法提示
3.时间、日期操作
time和datetime模块主要用于操作时间
时间有三种表示方式,一种是时间戳、一种是格式化时间、一种是时间元组
import time,datetime
time.sleep(1) 休息几秒
print(int(time.time())) # 获取当前时间戳 time.time()是float类型的,要用就转一下
print(time.strftime("%Y.%m.%d %H:%M:%S")) # 将时间元组转换成格式化输出的字符串
%Y年 %m 月份 %d天 %H小时 %M代表分钟 %S代表的是秒
print(time.struct_time) # 时间元组
print(time.asctime()) # 时间元转换成格式化时间
print(time.ctime()) # 时间戳转换成格式化时间
print(datetime.datetime.now()) # 当前时间格式化输出
print(datetime.datetime.now() + datetime.timedelta(3)) # 3天后的时间
print(datetime.datetime.now() + datetime.timedelta(-3)) # 3天前的时间
三、正则表达式
正则表达式就是用来查找字符串的,它能查找规则比较复杂的字符串
re模块是正则表达式模块,用来匹配一些特定的字符串
import re
1.常用的匹配语法
re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换
(1)match方法
match方法接收3个参数,第一个是匹配的规则,也就是正则表达式,第二个是要查找的字符串,
第三个参数不是必填的,用于控制正则表达式的匹配方式,看下面正则表达式的匹配模式。是从字符串的第一个单词中匹配字符串,如果匹配到返回一个对象,如果匹配不到,则返回None
import re
s = 'besttest is good'
print(re.match(r"be",s)) #打印的是一个对象
#字符串前面加r代表原字符串
print(re.match(r"be",s).group()) #查看结果
print(re.match(r'is',s))
结果:
<_sre.SRE_Match object; span=(0, 2), match='be'>
be
None
(2)search方法
search方法的参数和match一样,和match方法不一样的是,match是从字符串里面的第一个单词里面找,而search方法则是从字符串的整个内容里面找,如果找到了就返回第一个,找不到就返回None
import re
s = 'besttest is good is is is '
print(re.search(r'is',s).group())
结果:is
查找到就返回,只返回一个,可以用来判断
(3)findall方法
findall方法的参数上面的match、search一样,和他们不一样的是,findall会返回所有一个list,把所有匹配到的字符串,放到这个list里面,如果找不到的话,就返回一个空的list
import re
s = 'besttest is good is is is '
print(re.findall(r'is',s))
结果:['is', 'is', 'is', 'is']
print(re.findall(r'sss',s))
结果:[] #找不到结果为一个空列表
返回结果为一个list
(4)sub方法
sub方法和字符串的replace方法一样,是用来替换字符串的,把匹配到的值替换成一个新的字符串,接收3个参数,第一个是正则表达式,第二个是要替换成什么,第三个就是要查找的字符串,会返回一个新的字符串,如果匹配不到的话,返回原来的字符串
import re
s = 'besttest is good is is is '
print(re.sub(r'best','Best',s))
结果:Besttest is good is is is
(5)split方法
split 方法和字符串的split方法一样,是用来分割字符的,按照匹配到的字符串进行分割,返回的是一个list,如果匹配不到的话,那返回的list中还是原来的字符串
import re
s = 'besttest is good is is is '
print(re.split(r'best',s))
结果:['', 'test is good is is is ']
2.常用正则表达式符号:
(1)数量词
'*' 匹配*号前的字符0次或多次,只是*前面的一个字符
print(re.findall(r'be*','besttest very best b'))
结果:['be', 'be', 'b']
'+' 匹配前一个字符1次或多次,只是+前面的一个字符
print(re.findall(r'st+','besttest is best'))
结果: ['stt', 'st', 'st']
'?' 匹配前一个字符1次或0次,只是?前面的一个字符
print(re.findall(r'st?','besttest is best'))
结果:['st', 'st', 's', 'st']
'{m}' 匹配前一个字符m次
print(re.findall(r't{2}','besttest is best'))
结果: ['tt']
'{n,m}' 匹配前一个字符n到m次
print(re.findall(r't{1,2}','besttest is best'))
结果: ['tt', 't', 't']
(2)一般字符
'.' 默认匹配除\n之外的任意一个字符
print(re.findall(r'b.','besttest is good'))
结果:['be']
'\' 转译符,前面的* + ?这样的字符都有特殊含义了,如果你想就想找它的话,那就得转译了
意思就是说如果你想让特殊字符失去以前的含义,那么就得给它前面加上\
print(re.findall(r'\?','besttest is best????'))
>>> ['?', '?', '?', '?']
'|' 匹配|左或|右的字符
print(re.findall(r'best|is','besttest is best'))
结果:['best', 'is', 'best']
'[]' 字符集合,某些字符的集合,匹配的时候是这个集合里面的任意一个就行
print(re.findall(r'be[stacj]','besttest is best bejson'))
结果:['bes', 'bes', 'bej']
在[]里面如果用^的话代表取反,也就是不包括的这些字符串的
print(re.findall(r'be[^stac]','besttest is best bejson'))
(3)边界匹配
'^' 匹配以什么字符开头,多行情况下匹配每一行的开头
print(re.findall(r'^b','besttest is good'))
结果: ['b']
print(re.findall(r'^b','besttest is good\nbest',re.M))#多行模式
结果: ['b','b']
'$' 匹配以什么字符结尾,多行情况下匹配每一行的结尾
print(re.findall(r'd$','besttest is good'))
结果:['d']
print(re.findall(r'd$','besttest is good\nbest is good',re.M<span style="line-height:1.5;">))#多行模式</span> >>>['d','d']
'\A' 仅以什么字符开头,和^不同的是它不能用多行模式
print(re.findall(r'\Ab','besttest is good'))
结果: ['b']
'\Z' 仅以什么字符结尾,和$不同的是它不能用多行模式
print(re.findall(r'd\Z','besttest is good'))
结果:['d']
(4)预定义字符集合
'\d' 匹配数字0-9
print(re.findall(r'\d+','sdf2342312sdfs'))
结果: ['2342312']
'\D' 匹配非数字
print(re.findall(r'\D','sdf2342312sdfs'))
结果:['sdf', 'sdfs']
'\w' 匹配[A-Za-z0-9],也就是所有的字母和数字和中文
print(re.findall(r'\w','sdf234%^2312sdfs&'))
结果:['sdf234', '2312sdfs']
'\W' 匹配不是[A-Za-z0-9],也就是不是字母和数字
print(re.findall(r'\W','sdf234%^2312sdfs&'))
结果:['%', '^', '&']
'\s' 匹配空白字符、\t、\n、\r,空格
print(re.findall('\s','axss\n\tsdf\t\r\t'))
结果: ['\n', '\t', '\t', '\r', '\t']
'\S'匹配空白字符,不是\t、\n、\r,空格
print(re.findall('\s','axss\n\tsdf\t\r\t'))
结果:['\n', '\t', '\t', '\r', '\t']
3.正则匹配模式
正则匹配模式是用在match、search、findall里面的第三个参数,还有其他的模式,但是一般也用不到,就这两种能用到,别的就不记了
re.I: #忽略大小写
re.M: #多行模式,改变'^'和'$'的行为
re.findall('pattern', 'string',re.I)
(.*):贪婪模式,匹配尽可能多的字符
(.*?)或(.+?):匹配尽可能少的字符,一旦匹配到第一个就不往下走了
Python之模块、正则的更多相关文章
- python,re模块正则
python没有正则需要导入re模块调用.正则表达式是为了匹配字符串,动态模糊的匹配,只要有返回就匹配到了, 没返回就没匹配到,前面是格式后面是字符串 最常用的匹配语法: re.match()#麦驰, ...
- Python(re模块,正则)
day18 正则表达式用处? 匹配 字符串 s = 'hello world' print(s.find('llo'))#第一个的位置 ret = s.replace('ll','xx') print ...
- python自动化--模块操作之re、MySQL、Excel
一.python自有模块正则 import re # re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None print(re.match("www ...
- Python使用re模块正则式的预编译及pickle方案
项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...
- python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则
python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess ...
- Python全栈 正则表达式(re模块正则接口全方位详解)
re模块是Python的标准库模块 模块正则接口的整体模式 re.compile 返回regetx对象 finditer fullmatch match search 返回 match对象 match ...
- python——re模块(正则表达)
python——re模块(正则表达) 两个比较不错的正则帖子: http://blog.csdn.net/riba2534/article/details/54288552 http://blog.c ...
- Day05 - Python 常用模块
1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...
- python常用模块(1):collections模块和re模块(正则表达式详解)
从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...
随机推荐
- Eclipse安装Properties插件来编辑中文
一.在线安装 输入这个地址:http://propedit.osdn.jp/eclipse/updates/ 二.离线安装 在官网上下载最新版本:https://zh.osdn.net/project ...
- mybatis指定jdbctype
MyBatis 插入空值时,需要指定JdbcType mybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换 所以在MyBatis映射文件中要 ...
- Wincc操作数据库SQLSERVER
WINCC写数据库 在WINCC的图形编辑器中,在输入域的属性中.选择事件.再选择键盘的释放动作,在动作代码框中写下例如以下代码: Dim conn,rs Dim strsql Dim a a=HM ...
- Cocos2d-html5入门之2048游戏
一.介绍 Cocos2d-JS是Cocos2d-x的Javascript版本,它的前身是Cocos2d-html5.在3.0版本以前叫做Cocos2d-html5,从3.0版本开始叫做Cocos2d- ...
- Java之正則表達式【使用语法】
认为好就顶一个!! ! ! 3.正則表達式 用一些特殊的有意义的字符组成的字符串(死记) 原子:正則表達式的最基本组成单位 正則表達式特殊意义的字符: . * + ?不能单独表示它们,假设非 ...
- IDEA Spark程序报错处理
错误一: // :: ERROR Executor: Exception ) java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Prod ...
- E20171011-hm
Rendering engine 渲染引擎; 引擎; 绘图引擎; interactive adj. 互动的; 互相作用的,相互影响的; [计] 交互式的; defer vt. 使推迟; 使延 ...
- [Apple开发者帐户帮助]八、管理档案(3)创建App Store配置文件
您可以创建自己的App Store配置文件,以便在将应用程序上载到App Store Connect时使用. 有关完整的App Store工作流程,请转到通过 Xcode帮助中的App Store分发 ...
- Windows(7/8/10)搭建kibana 6.x版本(elasticsearch的可视化服务)
在搭建kibana之前,我们先了解下什么是kibana Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作.您可以 ...
- C# System.Environment.GetFolderPath的使用 [转]
原文:https://blog.csdn.net/yongyong521/article/details/75105853 获取系统文件目录 string strPath = Environment. ...