一、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
激活虚拟环境
进入目录中:cd ./test_v/srcipt/
执行指令:activate
十、pip常用命令
- pip -V:查看pip工具版本
- pip help:查看帮助文档
- pip list:查看包列表
- pip freeze:导出包列表
- pip install:安装包
- pip install -U 升级包
- pip uninstall 卸载包
使用镜像安装三方包
pip install pytest -i https://pypi.douban.com/simple
十一、常用三方库
yaml
- 一种数据序列化的格式
- 用于人类可读性和脚本语言的交互
- 一种被认为可以超越xml、json的配置文件
yaml基本语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不能使用tab键,只允许使用空格键;
- 缩进的空格多少不重要,只要相同的层级左侧对齐即可;
-
#表示注释,从#一直到行尾都会被忽略
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
发送网络请求
- urllib
- urllib3
- requests
urllib3特点
- 线程安全
- 链接池管理
- 支持客户端SSL/TLS验证
- 支持http和socks代理
- 官方文档:urllib3 2.0.4 documentation
发生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)