一、内置库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 操作
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 数论与表示函数
1.3 幂函数与对数函数
1.4 三角函数
1.5 高等特殊函数
1.6 实战练习
- 常量
- 数论与表示函数(ceil, floor)
- 幂函数与对数函数 (pow(), sqrt())
实例
天天向上的力量
一年365天,以第1天的能力值为基数,记为1.0,
当努力学习时,能力值相比前一天提高1%,
当没有学习时能力值相比前一天下降1%。
(每天努力和每天放任,一年下来的能力值相差多少呢? )
五、日期与时间处理
目录
- 获取当前日期/获取特定时间
- datetime 与 timestamp 时间戳互转
- datetime 与 str 互转
- 实战练习
工作中应用
- 作为日志信息的内容输出
- 计算某个功能的执行时间
- 用日期命名一个日志文件的名称
- 生成随机数(时间是不会重复的)
python 中处理时间的模块
常见的时间表示形式
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])
替换字符串
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