美文网首页
Python学习笔记-常用标准库篇

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

作者: 陈yc | 来源:发表于2020-07-17 21:37 被阅读0次

    操作系统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']
    

    相关文章

      网友评论

          本文标题:Python学习笔记-常用标准库篇

          本文链接:https://www.haomeiwen.com/subject/kcrcqktx.html