首页 > 编程语言 >python常用标准库

python常用标准库

时间:2023-04-14 22:36:10浏览次数:36  
标签:常用 logging python datetime 标准 json time print dt

标准库之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))

标签:常用,logging,python,datetime,标准,json,time,print,dt
From: https://www.cnblogs.com/wlhk/p/17308138.html

相关文章

  • python6:元组与字典
    元组:是一种不可变的序列,在创建之后不能做任何的修改1:不可变2:用()创建元组类型3:可以是任何类型4:当元组中只有一个元素时,要加上逗号,不然解释器会当作整型来做处理。5:同样支持切片操作。 可以对元组中的列表数据项进行修改 count()用于统计数据中元素出现的次数 字典:python......
  • SpringBoot常用注解
    本文整理了SpringBoot常用注解,主要讲解这些注解的用法,并附上一致思维导图。SpringBoot常用注解组件相关注解@Controller用于修饰MVC中controller层的组件,SpringBoot中的组件扫描功能会识别到该注解,并为修饰的类实例化对象,通常与@RequestMapping联用,当SpringMVC获取到请求时......
  • python分段读取word文件数据到MySQL数据库和Java读取word数据到MySQL数据库
    1、python分段读取word文件数据到MySQL数据库示例:(注:此示例为读取某个文件夹下的所有文件,并对文件后缀名为doc的文件进行读取,并以文件名称为id完成对该word内容的插入。)#导入os模块importos#导入所需库importpymysqlfromdocximportDocument#path定义要获取的......
  • python3类的继承与相关
    参考:https://blog.csdn.net/zhouzhiwengang/article/details/1196776371、继承python支持类继承,在子类类名后的圆括号()中声明继承的父类,如果没有继承,则可以不加()。支持多继承,直接写入多个类名,用,分隔。如果没有指定基类,python的类会默认继承object类。object是所有python类......
  • Docker CLI docker compose create常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • 常用的Git命令及示例
    目录01gitinit:初始化一个空的Git仓库02gitadd将修改添加到Git仓库暂存区03gitcommit将修改提交到Git仓库04gitpull从远程Git仓库拉取最新的代码05gitpush将本地代码推送到远程Git仓库06gitbranch创建和管理Git分支新建分支查看分支删除分支07gitcheckout切......
  • python3类
    1、类python中使用关键字class声明类。在类中,可以有变量和方法。2、对象变量和类变量在类中、方法外声明的变量为类变量,基于该类创建的对象共享类变量。在类中、方法中声明的变量为对象变量,属于各对象私有。对象变量一般建议在初始化方法__init__中统一声明,当然,在其他方法中......
  • python列表去重方法
    #!/usr/bin/python3withopen("d:/pythoncode/duplicate_content.txt","r")asf:content=f.readlines()f.close()print(len(content))#foriinrange(len(content)):#forjinrange(len(content)-i,len(content)):#pr......
  • Spring很常用的@Conditional注解的使用场景和源码解析
    你好,我是刘牌!介绍今天要分享的是Spring的注解@Conditional,@Conditional是一个条件注解,它的作用是判断Bean是否满足条件,如果满足条件,则将Bean注册进IOC中,如果不满足条件,则不进行注册,这个注解在SpringBoot中衍生出很多注解,比如@ConditionalOnProperty,@ConditionalOnBean,@Conditi......
  • 纹波标准
     Intel在ATX12V规范中规定,+12V输出纹波峰峰值不得超过120mv,+3.3V与+5V纹波峰峰值不得超过50mvhttps://www.likecs.com/show-204636116.html   动态负载测试:以下瞬态负载将应用于输出。波形应为方波,其上升和下降的斜率应为0.1A/μs。方波的频率应为50Hz至10KHz,占空比......