Phthon标准库
2019-08-11 本文已影响0人
angeliur
python标准库是日常应用比较广泛的模块,包括:
- 文字处理的 re
- 日期类型的time、datetime
- 数字和数学类型的math、random
- 文件和目录访问的pathlib、os.path
- 数据压缩和归档的tarfile
- 通用操作系统的os、logging、argparse
- 多线程的 threading、queue
- Internet数据处理的 base64 、json、urllib
- 结构化标记处理工具的 html、xml
- 开发工具的unitest
- 调试工具的 timeit
- 软件包发布的venv
- 运行服务的main
正则表达库re
-
各种正则表达式的含义如下:
. 表示可以匹配除\n 以外任何单个字符,多个.表示匹配多个字符。如:re.compile('...').match('amdsdgg') 表示匹配前三个字符'amd' ^ 表示以什么内容开头 $ 表示以什么内容结尾 * 表示匹配前面的字符出现0次到多次,如re.compile('ca*t').match('ct')和re.compile('ca+t').match('caaaat')都可以匹配 + 表示匹配前面的字符出现1次到多次,如re.compile('ca+t').match('ct')这样就不会匹配,因为'ct'中没有出现'a' ? 表示匹配前面的字符出现0次或1次,,如re.compile('ca+t').match('ct')和re.compile('ca+t').match('cat')都可以匹配,而re.compile('ca+t').match('caaaat')这样就不会匹配 {m} 表示匹配前面的字符出现m次 {m,n} 表示匹配前面的字符出现m到n次 [] 表示匹配[]里面出现的任意字符,如'c[bcd]t'就可以匹配cbt 、 cct 以及cdt | 通常结合分组匹配符 () 来一起使用 \d 表示匹配0到9的单个数字,相当于使用[0-9]来匹配;如果要表示匹配0到9的数字多次,就用 \d+ 来表示,相当于使用[0-9]+;\d{5} 匹配指定个数(5个)的数字 \D 表示匹配不包括数字的内容 \s 表示匹配任意空白符 \S表示匹配非空白 空白指空格、制表符\t 换行符\n 等 () 用来进行分组,如'(\d+)-(\d+)-(\d+)'可以匹配日期'2018-05-10' ^$ 表示匹配空行,比如匹配一段文本时,其中有一行是空的,什么都不包括,通过^$就可以看匹配空行 .*? 表示不使用贪婪模式,贪婪模式就是*匹配的时候会尽可能多的匹配,*加上?后表示只匹配第一个匹配上的内容
-
实例代码
import re # print(re.compile('.').match('q')) # print(re.compile('...').match('sddamgdd')) # print(re.compile('ca*t').match('caaat')) # print(re.compile('ca+t').match('ct')) # print(re.compile('ca?t').match('ct')) # print(re.compile('ca?t').match('caat')) # print(re.compile('ca{4}t').match('caaaat')) # print(re.compile('ca{4,7}t').match('caaaaaat')) # print(re.compile('c[bcd]t').match('cat')) # print(re.compile('c[bcd]t').match('cdt')) # print(re.compile('c\dt').match('c2t')) # print(re.compile('c\d+t').match('c15439964t')) # print(re.compile('c\Dt').match('cht')) # print(re.compile('c\Dt').match('c5t')) # print(re.compile('c\st').match('c t')) # print(re.compile('c\st').match('c t')) #贪婪模式 print(re.compile('hello*').match('hellooooooo omg')) #非贪婪模式 print(re.compile('hello*?').match('hellooooooo omg')) #使用正则对日期进行分组 # r'(\d+)-(\d+)-(\d+)' 正则字符串前面加r 表示不对字符串里的内容进行转义 p = re.compile(r'(\d+)-(\d+)-(\d+)') # print(p.match('aa2018-05-10bb').group(2)) 无法匹配,因为2018前面出现了字母aa print(p.match('2018-05-10bb').group()) #group()表示分组后的所有内容,group(1)表示分组后的第一个内容 # print(p.match('2018-05-10').groups()) # year, month, day = p.match('2018-05-10').groups() # print(year) # match是来进行完全匹配的,所以对于'aa2018-05-10bb'无法匹配'(\d+)-(\d+)-(\d+)';而search是进行搜索匹配,如果第一个字符不匹配,会向后继续查找看是否有可以匹配的内容 print (p.search('aa2018-05-10bb')) #sub()方法可以进行替换,第一个参数是整个内容中需要被替换的部分,第二个参数是替换成的内容,第三个参数是整个内容 phone = '123-456-789 # 这是电话号码' p2 = re.sub(r'#.*$','',phone) # 将'# 这是电话号码'替换成'' print(p2) p3 = re.sub(r'\D','',p2) # 将字符串中所有不是数字的内容替换成'' print(p3) # findall() 可以匹配多次的方法
日期与时间函数库
import time
print(time.time())
print(time.localtime())
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 以指定的格式获取当前时间
import datetime
print(datetime.datetime.now()) #获取当前时间
newtime = datetime.timedelta(minutes=10) #10分钟以后
print(datetime.datetime.now() + newtime) #获取当前时间的10分钟以后
one_day = datetime.datetime(2008,1,25) #获取指定时间
newday = datetime.timedelta(days=15)
print(one_day + newday) #获取指定时间的15天以后
数学相关库
import random
# 产生从1到5的随机int数
print(random.randint(1,5))
# 从['abc','edg','mnq']中随机选出一个
print(random.choice(['abc','edg','mnq']))
文件与目录操作库
import os
print(os.path.abspath('.'))
print(os.path.abspath('..'))
print(os.path.exists('E:\geektime_python'))
print(os.path.isdir('E:\geektime_python'))
print(os.path.isfile('E:\geektime_python'))
# os.path.join('tem/a/','b/c')
from pathlib import Path
# Path('.')相当于os.path.abspath('.')
p = Path('.')
print(p.resolve())
print(p.is_dir())
# 通过Path.mkdir()创建指定目录,参数parents=True表示如果指定的某一个目录不存在父目录也可以创建成功,
# 比如创建'stydy/a/b'目录之前,只有a是有父目录study的,而b则没有父目录。如果parents=False会报错
q = Path('E:\\geektime_python\\stydy\\a\\b')
Path.mkdir(q,parents=True)