python常用标准库

标准库之os

  1. 系统相关变量和操作
  2. 文件和目录相关操作
  3. 执行命令和管理进程
import os

# 1.系统相关的内容
print(os.name)
print(os.environ)  # 环境变量
print(os.sep)  # 查看分隔符
print(os.pathsep)  # windows是;号  Linux是:号
print(os.linesep)  # 文件换行符

# 2.文件和目录操作
os.mkdir('demo')
os.mkdir('demo')
os.getcwd()  # 当前目录
os.remove()  # 文件删除

# 子模块os.path
file = os.getcwd() + 'test.py'
print(os.path.split(file))
print(os.path.isabs(file))  # 判断绝对路径
# isdir isfile
print(os.path.exists(file))  # 判断文件或者路径是否存在

print(os.path.getatime(file))  # 最后访问时间
print(os.path.getctime(file))  # 创建时间
print(os.path.getmtime(file))  # 最后修改时间

print(os.path.getsize(file))  # 获取文件大小

# 3.执行命令和管理进程
os.system  # 交互性不强,只有执行结果
os.popen  # 已不推荐使用os.system和popen

os.popen('helloworld.py')
os.system('ipconfig')

标准库之sys

import sys

print(sys.version)  # 版本号
print(sys.maxsize)  # 能够表示的最大int
print(sys.path)  
print(sys.platform)  
print(sys.copyright)
print(sys.argv)  # 参数

sys.exit(0)  # 退出 状态码

print(sys.getdefaultencoding())
print(sys.getfilesystemencoding())
print(sys.getrecursionlimit())  # 最大递归数量
sys.setrecursionlimit(200)

标准库之random

主要用于生成“伪随机数”

import random

# 生成随机的整数
print(random.randint(1, 100))  
print(random.randrange(1, 101, 2))  # 生成随机奇数或者偶数

# 生成随机的浮点数
print(random.random())  # 浮点数在0.0-1.0之间
print(random.uniform(11.1, 13.1))   # 生成区间之内的浮点数

# 非数字类型的随机抽样
targetList = ['a', 'b', 'c', 'd', 'e', 'f']
print(random.choice(targetList))  # 从指定list中随机抽样1个

# 乱序
print(targetList)
print(random.shuffle(targetList))  # 原地改变
print(targetList)

print(random.sample(targetList, 4))  # 抽样,但不改变原样本
# 生成随机密码
# 字符只包括字母和数字
# 可以指定生成字符串的位数
import random, string

def gen_random_string(length):
    # 随机生成字母和数字的位数
    # 1<= numcount <= length-1
    numcount = random.randint(1, length-1)
    lettercount = length - numcount
    
    # 随机抽样生成数字序列
    numlist = [random.choice(string.digits) for _ in range(numcount)]
    
    # 随机抽样生成字符序列
    letterlist = [random.choice(string.ascii_letters) for _ in range(lettercount)]
    
    #合并字母和数字
    alllist = numlist + letterlist
    
    # 乱序
    random.shuffle(alllist)  
    
    # 生成目标结果字符串
    result = "".join(alllist)
    
    return result

randString = gen_random_string(10)
print(randString)

标准库之time

# 时间戳、结构化时间对象、格式化时间字符串

# 时间戳
print(time.time())
print(time.time() - 3600)

# 结构化时间对象
st = time.localtime()
print(st, type(st))
print("今天是 {}-{:02d}-{}".format(st[0], st[1], st[2]))
print("今天是 星期{}".format(st.tm_wday + 1))

# 格式化时间字符串
print(time.ctime())

#
print(time.strftime("%Y-%m-%d %H:%M:%S"))

time.sleep(1)

标准库之datetime

在time标准库上进一步分装

datetime.date

datetime.time

datetime.datetime

datetime.timedelta

import datetime
import time

# datetime.date
# 生成日期
d = datetime.date.today()
print(d, type(d))

d = datetime.date(2022, 4, 12)
print(d, type(d))

d= datetime.date.fromtimestamp(time.time())
print(d, type(d))

# 类属性
print(datetime.date.min)
print(datetime.date.max)
print(datetime.date.resolution)  # timedelta

# 实例属性
print(d.year)
print(d.month)
print(d.day)

# 常用的实例方法
# datetime.data对象 -> 结构化时间对象
print(d.timetuple())

# 其他方法
# replace
print(d.replace(2022))
print(d.replace(d.year, 9))
print(d.replace(day=20))
print(d.replace(d.year, d.month, 20))
print(d.toordinal())  # 从0001-01-01到现在的天数
print(d.weekday())  # 0代表周一
print(d.isoweekday()) # 1代表周一
print(d.isoformat())
print(d.strftime("%Y-%m-%d"))
# datetime.time
print("{:=^50s}".format("datetime.date"))  # 生成分割线

# 生成时间
t = datetime.time(15, 10, 45, 888888)  # 时、分、秒、微秒
print(t, type(t))

# 类方法
print(datetime.time.min)
print(datetime.time.max)
print(datetime.time.resolution)

# 实例属性
print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)

# 其他方法
print(t.isoformat())
print(t.strftime("%H-%M-%S %f"))
# datetime.datetime
# 生成日期时间

dt = datetime.datetime(2022, 4, 12, 20, 50, 30, 888888)
print(dt, type(dt))

dt = datetime.datetime.now()
print(dt, type(dt))

# 时间戳 -> dt
dt = datetime.datetime.fromtimestamp(time.time())
print(dt, type(dt))
# 字符串 -> dt
dt = datetime.datetime.strptime("2023-4-12 20:52:33", "%Y-%m-%d %H:%M:%S")
print(dt, type(dt))
# date,time -> datetime
dt = datetime.datetime.combine(d, t)
print(dt, type(dt))

# 实例属性
print(dt.year)
print(dt.month)
print(dt.day)
print(dt.hour)
print(dt.minute)
print(dt.second)
print(dt.microsecond)

# replace
print(dt.replace(second=57, day=20))
# datetime -> 结构化对象
print(dt.timetuple())
# datetime -> 时间戳
print(dt.timestamp())
# datetime -> 结构化字符串
print(dt.strftime("%Y-%m-%d %H:%M:%S"))

# 时间戳 -> datetime
print(datetime.datetime.fromtimestamp(time.time()))
# 格式化对象 -> datetime
print(datetime.datetime.strptime("2023-4-12 20:52:33", "%Y-%m-%d %H:%M:%S"))
# 结构化对象 -> datetime
print(datetime.datetime.fromtimestamp(time.mktime(time.localtime())))

image

# datatime.timedelta

# 生成时间差
td = datetime.timedelta(days=10, hours=5)
print(td, type(td))
td = datetime.timedelta(days=-5, hours=-8)  #向前
print(td, type(td))
td = datetime.timedelta(weeks=2)
print(td, type(td))

# 计算目标日期
dt = datetime.datetime.today()
print("现在是 {}".format(dt.strftime("%Y-%m-%d %H:%M:%S")))
delta = datetime.timedelta(days=10)
target = dt + delta
print("十天后是 {}".format(target.strftime("%Y-%m-%d %H:%M:%S")))

标准库之logging

image

日志级别

默认的日志级别是warning

级别 级别数值 使用时机
DEBUG 10 详细信息,常用语调试。
INFO 20 程序正常运行过程中产生的一些信息。
WARNING 30 警告用户,虽然程序还在正常工作,但有可能发生错误。
ERROR 40 由于更严重的问题,程序已不能执行一些功能了。
CRITICAL 50 严重错误,程序已不能继续运行。

相关组件

名称 作用
Loggers 记录器,提供应用程序代码直接使用的接口
Handlers 处理器,将记录器产生的日志发送至目的地
Filters 过滤器,提供更好的粒度控制,决定哪些日志会被输出
Formatters 格式化器,设置日志内容的组成结构和消息字段

Formatters格式

属性 格式 描述
asctime %(asctime)s 日志产生的时间,默认格式为msecs2003-07-0816:49:45,896
msecs %(msecs)d 日志生成时间的亳秒部分
created %(created)f time.tme)生成的日志创建时间戳
message %(message)s 具体的日志信息
filename %(filename)s 生成日志的程序名
name %(name)s 日志调用者
funcname %( funcname)s 调用日志的函数名
levelname %(levelname)s 日志级別( DEBUG,INFO, WARNING, 'ERRORCRITICAL)
levene %( leveling)s 日志级别对应的数值
lineno %(lineno)d 日志所针对的代码行号(如果可用的话)
module %( module)s 生成日志的模块名
pathname %( pathname)s 生成日志的文件的完整路径
process %( (process)d 生成日志的进程D(如果可用)
processname (processname)s 进程名(如果可用)
thread %(thread)d 生成日志的线程D(如果可用)
threadname %( threadname)s 线程名(如果可用)

demo:

import logging

# 默认只显示warning及以上的日志信息
logging.basicConfig(filename='demo.log', filemode='w', level=logging.DEBUG)

logging.debug("This is debug log")
logging.info("This is info log")
logging.warning("This is warning log")
logging.error("This is error log")
logging.critical("This is critical log")

# 向日志输出变量
name = '张三'
age = 18
logging.debug("姓名 %s, 年龄 %d", name, age)
logging.debug("姓名 %s, 年龄 %d" % (name, age))
logging.debug("姓名 {}, 年龄 {}".format(name, age))
logging.debug(f"姓名 {name}, 年龄 {age}")

# 输出格式和添加一些公共信息
logging.basicConfig(format="%(asctime)s|%(message)s", level=logging.DEBUG)
name = '张三'
age = 18
logging.debug("姓名 %s, 年龄 %d", name, age)

logging.basicConfig(format="%(asctime)s|%(levelname)s|%(message)s", level=logging.DEBUG)

logging.basicConfig(format="%(asctime)s|%(levelname)s|%(message)s", datefmt="%Y-%m-%d %H:%M:%S", level=logging.DEBUG)

代码形式:

import logging

# 记录器
logger = logging.getLogger('applog')  # 默认是root
logger.setLevel(logging.DEBUG)  # 优先级最高
# print(logger, type(logger))

# 处理器handler
consoleHandler = logging.StreamHandler()  # 默认往console上输出
consoleHandler.setLevel(logging.DEBUG)

# 文件handler
fileHandler = logging.FileHandler(filename='Demo.log')  # 默认使用创建的logger的日志级别
fileHandler.setLevel(logging.INFO) 

# formater格式 -是左对齐,s之前的数字是占位
formatter = logging.Formatter("%(asctime)s|%(levelname)-8s|%(filename)10s:%(lineno)4s|%(message)s")
# formatter2 格式可以有多个
 
    
# 组合在一起
# 给处理器设置格式
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
# 记录器设置处理器
logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)

# 定义一个过滤器
# 过滤指定Logger的日志
flt = logging.Filter("applog")

# logger.addFilter(flt)
fileHandler.addFilter(flt)

# 打印日志的代码
logger.debug("This is debug log")
logger.info("This is info log")
logger.warning("This is warning log")
logger.error("This is error log")
logger.critical("This is critical log")

配置文件形式:

#./logging.conf

#记录器:提供应用程序代码直接使用的接口
#设置记录器名称,root必须存在!!!
[loggers]
keys=root,applog

#处理器,将记录器产生的日志发送至目的地
#设置处理器类型
[handlers]
keys=fileHandler,consoleHandler

#格式化器,设置日志内容的组成结构和消息字段
#设置格式化器的种类
[formatters]
keys=simpleFormatter

#设置记录器root的级别与种类
[logger_root]
level=DEBUG
handlers=consoleHandler

#设置记录器applog的级别与种类
[logger_applog]
level=DEBUG 
handlers=fileHandler,consoleHandler
#起个对外的名字
qualname=applog
#继承关系
propagate=0

#设置
[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter

[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
#在午夜1点(3600s)开启下一个log文件,第四个参数0表示保留历史文件
args=('applog.log','midnight',3600,0)
level=DEBUG
formatter=simpleFormatter

[formatter_simpleFormatter]
format=%(asctime)s|%(levelname)8s|%(filename)s[:%(lineno)d]|%(message)s
#设置时间输出格式
datefmt=%Y-%m-%d %H:%M:%S
import logging
import logging.config

logging.config.fileConfig('logging.conf')
#使用字典就能从任意格式文件进行配置,字典是一种接口格式
# logging.config.dictConfig({"loggers":"root,applog"})

rootLogger = logging.getLogger('applog')
rootLogger.debug("This is root Logger, debug")

logger = logging.getLogger('cn.cccb.applog')
logger.debug("This is applog, debug")

try:
    int(a)
except Exception as e:
    # logger.error(e)
    logger.exception(e)

标准库之json

json是轻量级的文本数据交换格式,独立于语言之外的。

json具有自我描述性,更容易理解。

json是字符串。

访问元素: employees[0].lastName="Jobs";

{
    "employees":[
        {"firstName":"John", "lastName":"Doe"},
        {"firstName":"Anna", "lastName":"Smith"},
        {"firstName":"Peter", "lastName":"Jones"}
    ]
}
  1. 使用json字符串生成Python对象(load);
  2. 由Python对象格式化称为json字符串(dump)。

数据类型转换

将数据从json转换到Python内置类型:

JSON Python
object dict
array list
string str
number(int) int
number(real) float
true True
false False
null None

将数据从Python内置类型转换到json格式:

Python JSON
dict object
list,tuple array
str string
int,float,int- & float-derived Enums number
True true
False false
None null

使用方法

方法 功能
json.dump(obj,fp) 将python数据类型转换并保存到json格式的文件内。
json.dumps(obj) 将python数据类型转换json格式的字符串。
json.load(fp) 从json格式的文件中读取数据并转换为python类型。
json.loads(s) 从json格式的字符串转换为python类型。
import json

# 从python对象转换为json字符串
person = {"name":"Sniper", "age":39, "tel":["123456", "123789"], "isonly":True}
print(person, type(person))

# indent格式化缩进,sort_keys排序
jsonStr = json.dumps(person, indent=4, sort_keys=True)
print(jsonStr, type(jsonStr))

json.dump(person, open('data.json', 'w'), indent=4, sort_keys=True)

# 从json字符串转换为python对象
jsonstr = '{"name": "Sniper", "age": 39, "tel": ["123456", "123789"], "isonly": true}'
pythonObj = json.loads(jsonstr)
print(pythonObj, type(pythonObj))  # dict

s = '["A", 1, "age", {"f":true, "l":"Snipper"}]'
pythonObj = json.loads(s)
print(pythonObj, type(pythonObj))  # list

pythonObj = json.load(open("data.json", "r"))
print(pythonObj, type(pythonObj))
posted @ 2023-04-14 22:19  RichardMrZ  阅读(67)  评论(0编辑  收藏  举报