【python编程语言-L3】

一、os内置库

系统相关

  • os.name:获取系统名称
  • os.envion:获取系统环境变量信息
  • os.getenv(“PATH”):获取指定名称的环境变量信息
  • os.system():执行系统指令
# print(dir(os))
# 获取系统名称.
# print(os.name)
# 获取系统环境变量信息
# pprint.pprint(os.environ)
# 获取指定名称的环境变量信息
# print(os.getenv("PATH"))
# 执行系统指令
# os.system("pwd")

目录相关

  • os.getcwd():获取当前目录
  • os.chdir():切换目录
  • os.listdir():列出当前目录内容
  • os.mkdir():创建空目录
  • os.makedirs():递归创建多级目录
  • os.rmdir():删除空目录
  • os.rename():重命名目录
  • os.remove():删除文件
# 获取当前所在目录
# print(os.getcwd())
# 切换目录
# os.chdir("../")
# print(os.getcwd())
# 列出当前目录下所有的文件
# print(os.listdir())
# 创建空目录
# os.mkdir("demo")
# 递归创建多级目录
# os.makedirs("a/b/c")
# 删除空目录
# print(os.rmdir("a/b"))
# os.rename("a","abs")
# 删除文件
# os.remove("abs.txt")

路径相关

  • os.path.abspath(path):返回绝对路径
  • os.path.basename(path):返回文件名
  • os.path.dirname(path):返回文件路径
  • os.path.split(path):分割路径为路径和文件名两部分
  • os.path.join(path):拼接路径
  • os.path.exists(paht):判断路径是否存在
  • os.path.isdir(path):判断是否是目录
  • os.path.isfile(path):判断是否为文件
  • os.path.getsize(path):获取文件大小

二、sys内置库

  • sys.version:返回python解释器版本
  • sys.platform:返回操作系统平台名称
  • sys.argv:返回外部向程序传递的参数
  • sys.modules:返回已导入的模块信息
  • sys.path:返回导包的搜索路径
  • sys.getdefaultencodeing()

三、文件的读写

  • r:以只读模式打开文件,并将文件指针指向文件头,如果文件不存在则报错
    • read():一次读取文件所有内容,以字符串形式返回
    • read(size):每次读取指定长度的内容,返回一个str;在python2中,size是指定字节长度,在python3中,size是指定字符长度
    • readlines():一次读取所有内容,按行返回的是一个list
    • readline():每次只读取一行内容
    • file_obj.seek():可以指定指针位置
  • w:以只写的模式打开文件,并将文件指针指向文件头,如果文件存在则清空文件内容,如果文件不存在则创建文件
  • a:以追加可写模式打开文件,并将文件指针指向文件尾部,如果文件不存在则创建文件
  • r+:在可读的基础上增加了可写的功能
    • 会一个字符一个字符的替换原来的内容
  • w+:在可写的基础上增加的可读的功能
    • 会清空原来的内容,再重新写入
  • a+:在追加的基础上增加了可读的功能
    • 在原文件的末尾,追加内容
  • b:读写二进制文件(默认是t,表示文本),需要与上面几种模式搭配使用,如ab,wb,rb

忘记关闭文件的危害

  • 打开文件到一定数量时,将会导致打开失败
  • 占用内存空间,非常浪费资源
  • 会导致系统自动回收资源,导致数据丢失
  • 使用with关键字可以在文件打开后自动关闭文件

四、math函数常用操作

  • 数字常量
    • math.pi:π
    • math.e:e
    • math.inf:无穷大
    • math.nan:非数字
  • 数论与表示函数
    • math.ceil():向上取整
    • math.floor():向下取整
  • 幂对数函数
  • 三角函数
  • 高等特殊函数

五、python中处理时间的模块

  • time:
  • datetime:
    • datetime.datetime:实际日期相关
    • datetime.timedelta:计算两个时间的时间差
    • datetime.timezone:时区相关
    • datetime.datetime.strptime:字符串与时间互转
    • datetime.datetime.now().strftime:时间与字符串互转
  • calender:

六、json常用方法

  • dumps():将python对象编码转化为JSON字符串
  • loads():解码JSON数据,返回python对象
  • dump():将python对象编码,并写入文件中
  • load():从文件中读取数据并解码为python对象

七、正则表达式re

  • pattern:正则表达式
  • string:要匹配的字符串
  • flag:可选,控制匹配方式
    • A:只进行ASCII匹配
    • I:不区分大小写
    • M:将^和$用于包含整个字符串的开始和结尾的每一行
    • S:使用(.)匹配所有字符串包括换行
    • X:或略模式字符串中为转义的空格和注释
  • complie():将字符串转化为正则表达式对象,适用于需要多次使用这个表达式的场景
  • match():从字符串的开始处进行匹配
pat01 = r"hog\w+"
s1 = "Hogwarts is a magic school"
match02 = re.match(pat01, s1, re.I)
print(match02)
print(match02.start(), match02.end(), match02.span(), match02.string, match02.group())
  • search():在整个字符串中搜索第一个匹配的值
  • findall():在整个字符串中搜索所有符合正则表达式的字符串,返回一个列表
  • sub():实现字符串的替换
    • re.sub(pattern,repl,string,[count],[flag]),count可选,表示替换的最大次数,默认为0,表示替换所有
  • split():分割字符串,返回列表

八、logging

  • 日志的级别
    • debug:细节信息,仅当诊断问题时使用
    • info :确认程序按预期运行
    • warning:表明有已经或即将发生的意外(例如:磁盘空间不足)。程序仍按正常运行
    • error:由于严重的问题,程序的某功能已经不能正常运行
    • critical:严重的错误,表明程序已不能继续执行
  • 日志设置
    • 设置打印级别:logging.basicConfig(level=logging.INFO)(默认打印warning级别的日志)
    • 设置打印到文件:logging.basicConfig(filename=“example.log”, level=logging.INFO)
    • 设置打印格式:logging.basicConfig(format=“%(asctime)s [%(levelname)s][%(filename)s:%(lineno)s]:%(message)s”)
  • 日志组件
    • logger:提供应用程序代码直接使用的接口
    • handles:用于将日志记录发送到指定的目的位置
    • filters:提供更细粒度的日志过滤器,用于决定哪些日志将会被输出(其他日志将会被忽略)
    • formatters:用于控制日志信息的最终输出格式
import logging
import os.path


# 定义获取logger的公共方法
def get_logger():
    logger = logging.getLogger(os.path.basename(__file__))
    logger.setLevel(logging.DEBUG)
    console_handler = logging.StreamHandler()
    file_handler = logging.FileHandler(filename="./logs/mylog.log", encoding="utf-8")
    file_handler.setLevel(logging.DEBUG)
    formatter = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s")
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)
    return logger

logging.conf文件配置

[loggers] # loggers 对象列表
        keys=root,main
[handlers] # handlers 对象列表
        keys=consoleHandlers,fileHandlers
[formatters] # formatters 列表
        keys=fmt

[logger_root]
        level=DEBUG
        handlers=consoleHandlers,fileHandlers

[logger_main] # main logger
        level = DEBUG
        handlers = fileHandlers
        qualname=main
        propagate=0

[handler_consoleHandlers]# consoleHandlers 指定控制器的输出方向、级别、输出格式、参数
        class = StreamHandler
        level = DEBUG
        formatter = fmt
        args = (sys.stdout,)

[handler_fileHandlers]# 循环日志文件 以文件大小来 分割# 每隔 1000 Byte 划分一个日志文件,备份文件为 3 个
        class = logging.handlers.RotatingFileHandler
        level = DEBUG
        formatter = fmt
        args = ('./logs/test.log', 'a', 10000, 3, 'UTF-8')

[formatter_fmt] # fmt 格式
        format=%(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)

九、venv虚拟环境管理

venv环境的优点

  • 独立的运行环境,不同的环境之间不会相互干扰
  • 有助于包的管理
  • 卸载和删除非常方便
    创建虚拟环境
  • 执行指令:python3 -m venv test
    image
    激活虚拟环境
    进入目录中:cd ./test_v/srcipt/
    执行指令:activate
    image

十、pip常用命令

  1. pip -V:查看pip工具版本
  2. pip help:查看帮助文档
  3. pip list:查看包列表
  4. pip freeze:导出包列表
  5. pip install:安装包
  6. pip install -U 升级包
  7. pip uninstall 卸载包
    使用镜像安装三方包
pip install pytest -i https://pypi.douban.com/simple

十一、常用三方库

yaml

  • 一种数据序列化的格式
  • 用于人类可读性和脚本语言的交互
  • 一种被认为可以超越xml、json的配置文件
    yaml基本语法规则
  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进不能使用tab键,只允许使用空格键;
  4. 缩进的空格多少不重要,只要相同的层级左侧对齐即可;
  5. #表示注释,从#一直到行尾都会被忽略
    yaml支持的数据结构
  • 对象:键值对的组合,用冒号:表示,相当于python中的字典;
  • 数组:一组按次序排列的值,前面加“- ”,相当于python中的列表;
  • 纯量:单个的、不可分割的值
    • 字符串
    • 整数
    • 浮点数
    • 布尔值
    • 时间
    • 日期
    • null
# 编程语言
language:
  - python
  - java
  - JavaScript

book:
    - python入门:
        price: 55
        author: lily
        available: true
        repertory: 20
        data: 2018-02-17
    - JavaScript入门:
        price: 30
        auther: tom
        available: false
        repertory: 20
        data: 2017-08-01

yaml包的使用

  • yaml.dump(): 将python对象转化为yaml文件
  • yaml.dumps(): 将python对象转化为yaml对象
  • yaml.loads():将yaml对象转化为python对象
  • yaml.safe_load():将yaml文件转化为python对象
class MgtYaml:
    def __init__(self, yaml_file):
        self.file = yaml_file

    def read_yaml(self):
        with open(self.file, encoding="utf-8") as file_obj:
            yaml_data = yaml.safe_load(file_obj)
        return yaml_data

十二、pymysql

pymysql简介

  • python数据库的接口标准是Python DB-api
  • PyMySQL是从Python连接到MySQL数据库服务的接口
  • 官方文档:http://pymysql.readthedocs.io

pymysql链接数据库

  • host:MySQL数据库的地址
  • user:用户名
  • password:密码
  • database:数据库名称
  • charset:编码格式,推荐使用uft8mb4
    链接数据库
import pymysql as pymysql

def connect_mysql():
    conn = pymysql.connect(
        host="mysql.hogwarts.ceshiren.com",
        user="stu",
        password="hogwarts_stu",
        charset="utf8mb4"
    )
    return conn

执行SQL语句

  • 提交操作
  • 回滚操作:rollback()
    try-except-else-finally
def execute_sql(sql):
    con = connect_mysql()
    cor = con.cursor()
    try:
        cor.execute(sql)
    except Exception as e:
        print(e)
        con.rollback()
    else:
        print(cor.fetchall())
        con.commit()
    finally:
        cor.close()
        con.close()

创建表

def test_create():
    sql = """
        CREATE TABLE IF NOT EXISTS `testcase_cc` (
            `id` int(11) NOT NULL AUTO_INCREMENT,
            `title` varchar(255) COLLATE utf8_bin NOT NULL,
            `expect` varchar(255) COLLATE utf8_bin NOT NULL,
            `owner` varchar(255) COLLATE utf8_bin NOT NULL,
            PRIMARY KEY (`id`)
            ) 
            ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
    """
    execute_sql(sql)

十三、urllib3

发送网络请求

  1. urllib
  2. urllib3
  3. requests
    urllib3特点

发生http请求

import urllib3

def test_http():
    # 创建线程池poolmanager实例对象
    pm = urllib3.PoolManager()
    resp = pm.request("get","http://httpbin.org/robots.txt")
    print(resp)  # <class 'urllib3.response.HTTPResponse'>

urllib3 HTTPResponse对象

    print(resp.status)  # 响应状态码
    print(resp.headers)  # 请求头信息
    print(resp.data)  # 响应原始二进制信息
    content = resp.data.decode("utf-8")
    print(content)  # {  "origin": "111.172.128.93"}

urllib3 request请求参数

  • 语法:urllib3.request(method,url,fields,headers,**)
  • 必填:
    • method:请求方式
    • url:请求地址
  • 选填
    • headers:请求头信息
    • fields:请求体数据
    • body:指定请求体类型
    • timeout:设置请求超时时间
      定制查询字符串参数
  • fields参数:适用于get、head、delete请求
  • 拼接URL:适用于post、put请求
def test_fields():
    pm = urllib3.PoolManager()
    fields = {"user": "yzcw"}
    resp = pm.request("get", "http://httpbin.org/get",fields=fields)
    content = resp.data.decode("utf-8")
    print(content)  # "url": "http://httpbin.org/get?user=yzcw"
def test_url_encode():
    pm = urllib3.PoolManager()
    url = "http://httpbin.org/post"
    from urllib.parse import urlencode
    # urlencode编码
    encode_str = urlencode({"user": "yzcw"})
    resp = pm.request(method="post", url=url + "?" + encode_str)
    content = resp.data.decode("utf-8")
    print(content)  # "url": "http://httpbin.org/post?user=yzcw"

urllib3 发生HTTPS请求

  • HTTPS请求默认是需校验证书的
  • PoolManager的cert_reqs参数
    • cert_reqs=“CERT_NONE”,不用校验
    • cert_reqs=“CERT_REQUIRED”,需要校验
def test_https():
    pm_https = urllib3.PoolManager(cert_reqs="CERT_NONE")
    url = "https://httpbin.ceshiren.com/get"
    reqs = pm_https.request("get",url)
    content = reqs.data.decode("utf-8")
    print(content)