Python学习笔记-常用标准库篇

操作系统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']
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341