(五)python内置库

一、内置库os

1、os 概述

  • os: Operating System
  • os 模块的常用功能
  • 跨平台的差异

2、os 使用

  • 导入 os 模块
  • 查看 os 模块使用文档
    • help(os)
    • dir(os)
    • import os
# 查看os模块说明文档
help(os)

# 查看os模块的属性和方法
print(dir(os))

3、os 常用方法

3.1 os 操作系统相关

  • os.name:获取系统名称
  • os.environ:获取系统环境变量信息
  • os.getenv(‘PATH’):获取指定名称的环境变量信息
  • os.system():执行系统指令
import os

# os.name:获取系统名称 nt代表window,posix代表linux
print(os.name)

# os.environ:获取系统环境变量信息
print(os.environ)

# os.getenv('PATH'):获取指定名称的环境变量信息
print(os.getenv('PATH'))

# os.system():执行系统指令
os.system('pwd')  # linux系统
print(os.system('dir'))  # windows系统

3.2os 目录相关

  • os.getcwd():获取当前目录
  • os.chdir():切换目录
  • os.listdir():列出当前目录内容
  • os.mkdir():创建空目录
  • os.makedirs():递归创建多级目录
  • os.rmdir():删除空目录
  • os.rename():重命名目录
  • os.remove():删除文件
"""目录相关"""
# 获取当前所在目录 get current directory
print(os.getcwd())
# 切换目录 change directory
os.chdir('..')
# 列出当前目录下的所有文件
print(os.listdir())
# 创建空目录
os.mkdir('new')
# 递归创建多级空目录
os.makedirs('a/b/c')
# 删除空目录
os.rmdir('new')
# 重命名目录
os.rename('a', 'a1')
# 删除文件
os.remove('demo.txt')
  • 操作路径

3.3 os 路径相关

path 方法 说明
os.path.abspath(path) 返回绝对路径
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回文件路径
os.path.split(path) 分割路径
os.path.join(path) 拼接路径
os.path.exists(path) 判断路径是否存在
os.path.isdir(path) 判断是否是目录
os.path.isfile(path) 判断是否是文件
os.path.getsize(path) 获取文件大小

3.4 os 路径用法实例

# 返回绝对路径
print(os.path.abspath("./os_demo.py"))
# 返回文件名
print(os.path.basename("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))
# 返回文件路径
print(os.path.dirname("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))
# 分割路径
print(os.path.split("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))
# 拼接路径
print(os.path.join("/Users/xiaofo/coding/pythonProject/course", "os_demo.py"))
# 判断路径是否存在
print(os.path.exists("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))
print(os.path.exists("./os_demo.py"))
# 判断是否是目录
print(os.path.isdir("../demos"))
# 判断是否是文件
print(os.path.isfile("./hello.py"))
# 获取文件大小
print(os.path.getsize("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))

二、内置库 sys

1、sys 概述

  • 是 Python 自带的内置模块
  • 是与 Python 解释器交互的桥梁

2、sys 使用

2.1 导入 sys 模块

# 导入sys模块
import sys

# 查看sys模块帮助文档
help(sys)

# 查看sys模块的属性和方法
print(dir(sys))

2.2 sys 常用属性

  • sys.version:返回 Python 解释器版本
  • sys.platform:返回操作系统平台名称
  • sys.argv:返回外部向程序传递的参数
  • sys.modules:返回已导入的模块信息
  • sys.path:返回导包的搜索路径列表
"""sys模块常用属性"""
# 返回Python 解释器版本
print(sys.version)
# 返回操作系统平台名称
print(sys.platform)
# 返回外部向程序传递的参数
print(sys.argv)
# 返回已导入的模块信息
print(sys.modules)
print(sys.modules.keys())
# 返回导包的搜索路径列表
print(sys.path)

2.3 sys 常用方法

  • sys.getdefaultencoding():获取编码方式
  • sys.exit():运行时退出
"""sys模块常用方法"""
# 获取系统当前编码
print(sys.getdefaultencoding())

# 运行时退出
sys.exit()

三、内置库 - 文件处理

1、IO 操作

IO操作

2、文件操作步骤

  • 打开文件
  • 操作文件:读/写内容
  • 关闭文件(读写完成,要及时的关闭)

2.1 open 方法

def open(file, mode='r', buffering=None, 
encoding=None, errors=None, newline=None, 
closefd=True):

3、文件读写模式

文件打开模式 描述
r 以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错
w 以只写模式打开文件,并将文件指针指向文件头;如果文件存在则将其内容清空,如果文件不存在则创建
a 以只追加可写模式打开文件,并将文件指针指向文件尾部;如果文件不存在则创建
r+ 在r的基础上增加了可写功能
w+ 在w的基础上增加了可读功能
a+ 在a的基础上增加了可读功能
b 读写二进制文件(默认是t,表示文本),需要与上面几种模式搭配使用,如ab,wb,ab+(POSIX系统,包括Linux都会忽略该字符)

3.1 实战1

# 第一步:(以只读模式)打开文件
f = open('data.txt', 'r', encoding='utf-8')  

# 第二步:读取文件内容
print(f.read())

# 第三步:关闭文件
f.close()

4、读操作

方法 描述
read() 一次读取文件所有内容,返回一个str
read(size) 每次最多读取指定长度的内容,返回一个str;在python2中size指定的是字节长度,在python3中size指定的是字符长度
readlines() 一次读取文件所有内容,按行返回一个list
readline() 每次只读取一行内容

忘记关闭文件的危害

  • 打开文件达到一定数量, 将会导致打开失败
  • 占用内存空间,非常浪费资源
  • 会导致系统自动回收资源,而丢失数据

4.1 with 用法

with open('data.txt', 'r', encoding='utf-8') as f:
    print(f.read())
print(f.closed)   ## 查看关闭状态

4.2读操作实战

  • 读取指定长度的内容
  • 读取文件中的一行
  • 遍历打印文件中的每一行

4.3写操作实战

  • mode=“w+”, 读写权限,会新建文件,清空内容再写入
  • mode=“r+”, 读写权限,替换原来的内容
  • mode=“a+”, 读写权限,追加内容

5、总结

  • 使用 with 方法,会自动完成关闭操作
  • 通过 python 封装的 API,可以实现读,写,追加操作
  • 文件打开要使用utf-8的编码格式(以免中文出现乱码)

四、内置库 - 科学计算

了解 math 函数

math 函数,python 提供的内置数学类函数库,包含了很多数学公式。
比如幂函数运算,三角函数,高等函数运算等。

1、math 函数操作

  • 数字常数
  • 数论与表示函数
  • 幂对数函数
  • 三角对数函数
  • 高等特殊函数

1.1数字常量

常数 数学表示 描述
math.pi π 圆周率,值为3.1415926535…
math.e e 自然对数,值为2.7182818…
math.inf 正无穷大,负无穷-math.inf
math.nan NAN 非数字 NAN(Not a Number)

1.2 数论与表示函数

image.png

1.3 幂函数与对数函数

1.4 三角函数

1.5 高等特殊函数

image.png

1.6 实战练习

  • 常量
  • 数论与表示函数(ceil, floor)
  • 幂函数与对数函数 (pow(), sqrt())

实例

天天向上的力量

一年365天,以第1天的能力值为基数,记为1.0,
当努力学习时,能力值相比前一天提高1%,
当没有学习时能力值相比前一天下降1%。
(每天努力和每天放任,一年下来的能力值相差多少呢? )

五、日期与时间处理

目录

  • 获取当前日期/获取特定时间
  • datetime 与 timestamp 时间戳互转
  • datetime 与 str 互转
  • 实战练习

工作中应用

  • 作为日志信息的内容输出
  • 计算某个功能的执行时间
  • 用日期命名一个日志文件的名称
  • 生成随机数(时间是不会重复的)

python 中处理时间的模块

  • time
  • datetime
  • calendar

常见的时间表示形式

  • 时间戳
  • 格式化的时间字符串

datetime 常用的类

  • datetime (from datetime import datetime) 时间日期相关
  • timedelta (from datetime import timedelta) 计算两个时间的时间差
  • timezone (from datetime import timezone) 时区相关

练习1 - 获取当前日期和时间

import datetime
now = datetime.datetime.now()

练习2 - 字符串与时间互转

s="2021-09-27 06:47:06"
# 将字符串 转换为datetime实例
s1=datetime.datetime.strptime(s,'%Y-%m-%d %H:%M:%S')

# 时间转成字符串
now = datetime.datetime.now()
result = now.strftime('%a, %b %d %H:%M')

# 参考链接:https://docs.python.org/3/library/datetime.html?highlight=strftime

练习3 - 时间戳 与时间互转

import datetime
mtimestamp = 1632725226.129461
# 将时间戳转成时间 
s = datetime.datetime.fromtimestamp(mtimestamp)
# 将时间转成时间戳
print(s.timestamp())

实例

写一段代码,生成一个以时间命名的日志文件。
并向日志文件中写入日志数据。

六、内置库 json

JSON

  • JSON 是用于存储和交换数据的语法,是一种轻量级的数据交换格式。
  • 使用场景
    • 接口数据传输
    • 序列化
    • 配置文件

JSON 结构

  • 键值对形式
  • 数组形式
{
    "language": [
        {
            "name": "python",
            "url": "https://www.python.org/"
        },
        {
            "name": "java",
            "url": "https://www.java.com/zh-CN/"
        }
    ]
}

Python 与 JSON 数据类型对应

python JSON 说明
dict object 字典
list,tuple array 序列
str string 字符串
int,float number 数字类型
True true 布尔值True
False false 布尔值False
None null 空值

json 库

  • 可以从字符串或文件中解析 JSON
  • 该库解析 JSON 后将其转为 Python 字典或者列表

常用方法

  • dumps():将 Python 对象编码成 JSON 字符串
  • loads():解码 JSON 数据,该函数返回 Python 对象
  • dump(): Python 对象编码,并将数据写入 json 文件中
  • load():从 json 文件中读取数据并解码为 Python 对象
import json

# 定义 python 结构
data = [{'a': 1, 'b': '2', 'c': True, 'd': False, 'e': None }]   

# 将 python 对象编码为 JSON 字符串
json_data = json.dumps(data)
# 将 JSON 字符串解码为 python 对象
python_data = json.loads(json_data)
# 写入 JSON 数据,在代码当前目录生成一个 data.json 的文件
with open('data.json', 'w') as f:    
     json.dump(data, f)   
# 读取数据,读取 json 文件并解码成 python 对象
with open('data.json', 'r') as f:
     data = json.load(f)

dumps 常用参数

  • indent:根据数据格式缩进显示,默认为 None,没有缩进
  • ensure_ascii:对中文使用 ASCII 编码,默认为 True
import json

data = {
    'a': 1, 
    'b': '霍格沃兹', 
    'c': True, 
    'd': False, 
    'e': None }

python_data = json.dumps(data, indent=4, ensure_ascii=False)
print(python_data)

七、内置库 re

什么是正则表达式

  • 正则表达式就是记录文本规则的代码
  • 可以查找操作符合某些复杂规则的字符串

使用场景

  • 处理字符串
  • 处理日志

在 python 中使用正则表达式

  • 把正则表达式作为模式字符串
  • 正则表达式可以使用原生字符串来表示
  • 原生字符串需要在字符串前方加上 r'string'
# 匹配字符串是否以 hogwarts_ 开头

r'hogwart_\w+'

使用 re 模块实现正则表达式操作

正则表达式对象转换

  • compile():将字符串转换为正则表达式对象
  • 需要多次使用这个正则表达式的场景
import re

'''
prog:正则对象,可以直接调用匹配、替换、分割的方法,不需要再传入正则表达式
pattern:正则表达式
'''

prog = re.compile(pattern)

匹配字符串

  • match():从字符串的开始处进行匹配
  • search():在整个字符串中搜索第一个匹配的值
  • findall():在整个字符串中搜索所有符合正则表达式的字符串,返回列表
import re

'''
pattern: 正则表达式
string: 要匹配的字符串
flags: 可选,控制匹配方式
    - A:只进行 ASCII 匹配
    - I:不区分大小写
    - M:将 ^ 和 $ 用于包括整个字符串的开始和结尾的每一行
    - S:使用 (.) 字符匹配所有字符(包括换行符)
    - X:忽略模式字符串中未转义的空格和注释
'''

re.match(pattern, string, [flags])
re.search(pattern, string, [flags])
re.findall(pattern, string, [flags])

替换字符串

  • sub():实现字符串替换
import re

'''
pattern:正则表达式
repl:要替换的字符串
string:要被查找替换的原始字符串
count:可选,表示替换的最大次数,默认值为 0,表示替换所有匹配
flags:可选,控制匹配方式
'''

re.sub(pattern, repl, string, [count], [flags])

分割字符串

  • split():根据正则表达式分割字符串,返回列表
import re

'''
pattern:正则表达式
string:要匹配的字符串
maxsplit:可选,表示最大拆分次数
flags:可选,控制匹配方式
'''

re.split(pattern, string, [maxsplit], [flags])

八、内置库多线程threding

九、内置库pythonlogging

日志作用

  • 调试
  • 辅助定位问题
  • 数据分析

日志的级别

级别 何时使用
DEBUG 细节信息,仅当诊断问题时适用
INFO 确认程序按预期进行
WARNING 表明有已经或即将发生的意外(例如:磁盘空间不足)。程序仍按预期进行。
ERROR 由于严重的问题,程序的某些功能已经不能正常执行
CRITICAL 严重的错误,表明程序已不能继续执行

日志的用法

https://docs.python.org/zh-cn/3/howto/logging.html

函数 说明
logging.debug(msg, *args, **kwargs) 创建一条严重级别为DEBUG的日志记录
logging.info(msg, *args, **kwargs) 创建一条严重级别为INFO的日志记录
logging.warning(msg, *args, **kwargs) 创建一条严重级别为WARINING的日志记录
logging.error(msg, *args, **kwargs) 创建一条严重级别为ERROR的日志记录
logging.critical(msg, *args, **kwargs) 创建一条严重级别为CRITICAL的日志记录
logging.log(msg, *args, **kwargs) 创建一条严重级别为level的日志记录
logging.basicConfig( **kwargs) 对root logger进行一次配置

设置日志的级别

logging.basicConfig(level=logging.INFO)

保存日志到文件

logging.basicConfig(filename='myapp.log', level=logging.INFO)

设置时间格式

logging.basicConfig(filename='myapp.log', level=logging.INFO,format='%(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)', datefmt='%m/%d/%Y %I:%M:%S %p')

python 日志进阶

组件 说明
loggers 提供应用程序代码直接使用的接口
handles 用于将日志记录发送到指定的目的位置
filters 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)
formatters 用于控制日志信息的最终输出格式

python 日志记录流程

python 日志定义

官网:https://docs.python.org/zh-cn/3/howto/logging.html

import logging
import os
# create logger 创建一个logger 记录器
logger = logging.getLogger(os.path.basename(__file__))
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

封装日志公共函数

https://ceshiren.com/t/topic/13564

日志配置文件

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

推荐阅读更多精彩内容