标准库
常用库
正则表达式库re
进行匹配和搜索
匹配(match)
①匹配一个字符
import re
#匹配
p=re.compile('a') #要匹配a
print(p.match('a'))#被匹配
所示结果:<re.Match object; span=(0, 1), match='a'>
匹配结果从0到1 匹配一个字符 匹配对象为a
②匹配多个字符
p=re.compile('ca*t') # a字符匹配 加*
print(p.match('caaaat'))
所示结果:<re.Match object; span=(0, 6), match='caaaat'>
正则表达式的元字符
. 匹配任意的单个字符
p=re.compile('...')
print(p.match('bat'))
所示结果:<re.Match object; span=(0, 3), match='bat'>
^ 以什么样的内容做开头
$ 以什么样的内容做结尾
*匹配前方字符出现的零次或多次
phone='123-456-789 #这是一串电话号码'
p=re.sub(r'#.*$','',phone)
print(p)
所示结果:123-456-789
?匹配前方字符出现的零次或一次
{1} 前方字符要出现的指定次数 1次
p=re.compile('.{3}')#任意字符出现3次
print(p.match('bat'))
{4,6} 前方字符要出现的指定次数4次到6次
[ ] 中括号里的一个任意字符匹配成功则都能匹配成功
| 字符选择左边或者右边
+ 匹配前方字符出现的一次或多次
() 进行分组
\d 匹配的内容为一串数字
p=re.compile(r'(\d+)-(\d+)-(\d+)')#数字匹配 r保持不转意 保持原样输入 #分组 #数字多次出现 +
print(p.match('2021-04-13').group()) #group 取出某一部分 ()默认全部取出 (1)取出第一个分组括号的内容
print(p.match('2021-04-13').groups()) #groups 全部分组取出
所示结果:
2021-04-13
('2021', '04', '13')
\D 匹配的内容不包含数字
phone='123-456-789 #这是一串电话号码'
p2=re.sub(r'\D','',p)
print(p2)
所示结果:123456789
\s 匹配的内容为字符串
^$ 空行
.*? 不使用贪婪模式
匹配多次 (findall)
搜索(search)
与complie中元字符的第一个字符和search的第一个字符进行匹配,如果匹配失败,与第二次字符进行匹配只到匹配成功
import re
p=re.compile(r'(\d+)-(\d+)-(\d+)')
print(p.search('aa2021-04-13bb'))
所示结果:<re.Match object; span=(2, 12), match='2018-05-10'>
(2,12)匹配字符的位置
替换(sub)
sub('元字符','被替换的内容','要替换的完整字符串')
phone='123-456-789 #这是一串电话号码'
p=re.sub(r'#.*$','',phone) # #.$ 从#后开始的任意字符
print(p)
所示结果:123-456-789
日期与时间函数库
时间的查看(time)
import time
print(time.time())#1970.1.1到现在的秒数
print(time.localtime())#当前的年月日和秒数
print(time.strftime('%Y-%m-%d %H:%M:%S'))#自定格式化输出 年月日 小时分组秒
所示结果:time.struct_time(tm_year=2021, tm_mon=4, tm_mday=14, tm_hour=17, tm_min=28, tm_sec=20, tm_wday=2, tm_yday=104, tm_isdst=0)
2021-04-14 17:28:20
时间的修改(datetime)
import datetime
print(datetime.datetime.now())#现在时间
newtime=datetime.timedelta(minutes=10) #设置偏移量为10分钟
print(datetime.datetime.now()+newtime) #现在的时间过了十分钟以后的时间
#固定日期的时间偏移
oneday=datetime.datetime(2018,5,20)
newday=datetime.timedelta(days=10)
print(oneday+newday)
所示结果:
2021-04-14 17:37:30.217509
2021-04-14 17:47:30.217509
2018-05-30 00:00:00
数字相关库(random)
random:从限定条件中产生随机数
import random
print(random.randint(1,5))#抽取1到5的随机数
print(random.choice(['aa','bb','cc','dd'])) #抽取随机的字符串
所示结果:
2
cc
文件与目录的操作库
linux命令行文件和目录访问
ls 查看文件内容
ls -l 区分文件和文件夹。名称前带- 则为文件,名称以d开头则为文件夹。
pwd 查看当前文件夹的所在位置
cd 访问其他位置文件夹
cd /tmp 访问根目录(绝对路径)
cd .. 访问上级目录(相对路径)
cd ./tmp 访问当前目录的下一级目录
mkdir -p /temp/a/b/c 建立文件夹
rmdir g 删除文件夹
rm -rf /temp/a 删除所有文件
文件库(os)
①os.path
import os
print(os.path.abspath('.'))#根本相对路径. 获取绝对路径
print(os.path.abspath('..'))#上级目录
print(os.path.exists('l'))#目录是否存在
print(os.path.isfile('/PycharmProject'))#判断是否为文件
print(os.path.isdir('learn'))#判断是否为目录
os.path.join('/tep/a/' 'b/c')# #路径拼接
所示结果:
D:\PycharmProjects\learnPython\learn
D:\PycharmProjects\learnPython
False
False
False
②os.pathlib
import os
from pathlib import Path
p=Path('.')#对.进行封装使其成为path类型
print(p.resolve())# 获取相对路径对应的绝对路径
p.is_dir() #判断是否为目录
#新建目录
q=Path('/tmp/a')#新建目录的完整路径
Path.mkdir(q,parents=True) #第一个参数为新建目录的路径 第二个参数parents 指的是上一级目录若不存在则自动创建
tips: 绝对路径是指文件在硬盘上真正存在的路径,例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“E:\book\网页布\代码\第2章\bg.jpg"。
相对路径就是相对于自己的目标文件位置
相对路径使用“/”字符作为目录的分隔字符,而绝对路径可以使用“\”或“/”字符作为目录的分隔字符