操作系统os
import os
print(os.getcwd()) # 获取当前的工作目录
print(os.path.abspath('.')) # 获取当前目录的绝对路径
print(os.path.exists('/usr')) # 判断目录是否存在
print(os.path.isdir('/usr')) # 判断路径是否为文件夹
print(os.path.isfile('/usr')) # 判断路径是否为文件
print(os.path.join('/usr/local', 'mongodb')) # 连接两个路径
os.chdir('/var/root/Downloads') # 切换目录
os.system('mkdir hello') # 在当前目录执行系统指令
from pathlib import Path
p = Path('.')
print(p.resolve()) # 解析路径
p2 = Path('/private/var/root/Downloads/test/a/b/c')
Path.mkdir(p2, parents=True) # 创建目录
正则表达式re
re.match
从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
语法:re.match(pattern, string, flags=0)
- pattern: 正则表达式
- string: 要匹配的字符串
- flags: 标志位
import re
str = 'Hello my friend!'
matchObj = re.match('Hello', str)
matchObj2 = re.match('morning', str)
print(matchObj) # <re.Match object; span=(0, 5), match='Hello'>
print(matchObj.span()) # (0, 5)
print(matchObj2) # None
# 分组
date = '2020-03-01'
matchObj3 = re.match(r'(\d+)-(\d+)-(\d+)', date)
print (matchObj3.group()) # 2020-03-01
print (matchObj3.group(1)) # 2020
print (matchObj3.group(2)) # 03
print (matchObj3.group(3)) # 01
print (matchObj3.groups()) # ('2020', '03', '01')
# 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组
re.search
扫描整个字符串并返回第一个成功的匹配。
语法:re.search(pattern, string, flags=0)
- pattern: 正则表达式
- string: 要匹配的字符串
- flags: 标志位
import re
str = 'Hello my friend!'
searchObj = re.search('hello', str, re.I) # re.I忽略大小写
searchObj2 = re.search('friend', str)
print(searchObj) # <re.Match object; span=(0, 5), match='Hello'>
print(searchObj2) # <re.Match object; span=(9, 15), match='friend'>
re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,返回 None;
re.search 匹配整个字符串,直到找到一个匹配。
re.sub
用于替换字符串中的匹配项。
语法:re.sub(pattern, repl, string, count=0, flags=0)
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
- flags : 编译时用的匹配模式,数字形式。
import re
phone = '020-1234-5678 # 客服电话'
subObj = re.sub(r' #.*$', '', phone)
subObj2 = re.sub(r'\D', '', phone)
print(subObj) # 020-1234-5678
print(subObj2) # 02012345678
re.compile
用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法:re.compile(pattern[, flags])
import re
phone = '020-1234-5678 # 客服电话'
pattern = re.compile(r'\d+')
subObj3 = pattern.sub('', phone)
print(subObj3) # -- # 客服电话
re.findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
语法:re.findall(string[, pos[, endpos]])
- string:待匹配的字符串。
- pos:可选参数,指定字符串的起始位置,默认为 0。
- endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。
import re
s = 'a1b2c3d4e5'
findallObj = pattern.findall(s)
findallObj2 = pattern.findall(s, 0, 6)
print(findallObj) # ['1', '2', '3', '4', '5']
print(findallObj2) # ['1', '2', '3']
re.finditer
找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
语法:re.finditer(pattern, string, flags=0)
import re
s = 'a1b2c3d4e5'
finditer = pattern.finditer(s)
for match in finditer:
print(match.group(), end=' ') # 1 2 3 4 5
re.split
照能够匹配的子串将字符串分割后返回列表。
语法:re.split(pattern, string[, maxsplit=0, flags=0])
- pattern:匹配的正则表达式
- string:要匹配的字符串。
- maxsplit:分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
- flags:标志位
import re
word = 'Good morning, I am Tony, I am 8 years old.'
splitObj = re.split('\W+', word)
print(splitObj) # ['Good', 'morning', 'I', 'am', 'Tony', 'I', 'am', '8', 'years', 'old', '']
数学math
import math
print(math.pi) # 3.141592653589793 # 获取PI数值
print(math.cos(3 / 4)) # 0.7316888688738209 # 计算cos
print(math.ceil(3.14)) # 4 # 大于或者等于 x 的最小整数
print(math.floor(3.14)) # 3 # 小于或等于 x 的最大整数
print(math.log(1024, 2)) # 10.0 # 计算log2 1024
import random
r = random.random() # 获取随机数 0~1
print(r) # 0.5294020269090223
r1 = random.choice(['a', 'b', 'c', 'd', 'e', 'f']) # 在列表中随机选择一个
print(r1) # [92, 74, 87, 80, 24, 62, 50, 51, 10, 66]
r2 = random.sample(range(100), 10) # 在0-100之间随机抽取10个数
print(r2)
r3 = random.randrange(10) # 获取0-10之间随机一个整数
print(r3) # 6
日期和时间time&datetime
import time
print(time.time()) # 1593745956.56883
print(time.localtime()) # time.struct_time(tm_year=2020, tm_mon=7, tm_mday=3, tm_hour=11, tm_min=12, tm_sec=36, tm_wday=4, tm_yday=185, tm_isdst=0)
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2020-07-03 11:12:36
import datetime
print(datetime.datetime.now()) # 2020-07-03 11:12:36.568968
d = datetime.datetime(1991, 1, 24)
print(d) # 1991-01-24 00:00:00
delta = datetime.timedelta(days=10)
print(d - delta) # 1991-01-14 00:00:00
数据压缩
import zlib
s = b'Hello, my name is chenyc, I am 28 years old, I like football'
print(len(s)) # 60
t = zlib.compress(s)
print(len(t)) # 66
s2 = zlib.decompress(t)
print(s2) # b'Hello, my name is chenyc, I am 28 years old, I like football'
# 计算 data 的 CRC (循环冗余校验) 值。计算的结果是一个 32 位的整数。
print(zlib.crc32(s)) # 67976846
性能测量timeit
from timeit import Timer
t1 = Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
print(t1) # 0.17976213800000007
t2 = Timer('a,b = b,a', 'a=1; b=2').timeit()
print(t2) # 0.1171402749999999
网络urllib
基本使用:
from urllib import request
url = 'http://www.baidu.com'
response = request.urlopen(url, timeout=5) # 打开链接
print(response.read().decode('utf-8')) # 打印链接返回信息
get、post 请求:
from urllib import request
from urllib import parse
url = 'http://www.httpbin.org'
response_get = request.urlopen(url + '/get?a=123&b=456', timeout=5)
print(response_get.read().decode('utf-8'))
data = bytes(parse.urlencode({'say': 'hello'}), encoding='utf8') # 提交数据
response_post = request.urlopen(url + '/post', data=data, timeout=5)
print(response_post.read().decode('utf-8'))
捕获请求超时异常:
import socket
from urllib import request
from urllib import error
try:
response_timeout = request.urlopen('http://www.httpbin.org/get', timeout=0.1)
except error.URLError as e:
if isinstance(e.reason, socket.timeout):
print('TIME OUT!')
设置Headers:
from urllib import request
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
}
data = bytes(parse.urlencode({'a': '123'}), encoding='utf8')
req = request.Request(url='http://www.httpbin.org/get?a=123&b=456', data=data, headers=headers, method='GET')
response_header = request.urlopen(req)
print(response_header.read().decode('utf-8'))
文件通配符glob
import glob
# 从目录通配符搜索中生成文件列表
ls = glob.glob('*.py')
print(ls)
# ['my_module.py', 'stardard_math.py', 'hello_world.py', 'standard_glob.py', 'standard_re.py', 'standard_urllib.py', 'standard_time.py', 'standard_os.py']