目录
内置库
os/sys
【python】(十一)python内置库——OS和sys_python安装sys库_爱测试的高胖胖的博客-CSDN博客
文件处理
Python基础:Python文件处理_埋头苦干的渗透小白的博客-CSDN博客
科学计算
日期与时间处理
python处理时间和日期_python操作日期和时间的方法_爱分析的博客-CSDN博客
获取当前时间/获取特定时间
- 作为日志信息的内容输出
- python中处理时间的模块
- time
- datetime(重点)//from datetime import datetime
- 获取当前的日期和时间
-
import datetime nowtime = datetime.datetime.now() print(nowtime) #打印当前的时间2023-07-18 18:08:30.916404 print(nowtime.day)#打印当前月月份的第几天 18 print(nowtime.weekday())# 打印当前是每周的星期几 1 print(nowtime.month)#打印当前的月份 print(nowtime.year)# 打印当前的年份 print(nowtime.timestamp())#转成时间戳 1689675321.258739
- 字符串与时间的互换
-
s = '2023-07-18 18:21:59' s1 = datetime.datetime.strptime(s,'%Y-%m-%d %H:%M:%S') # %Y(代表年)-%m(月)-%d(天) %H(时):%M(分):%S(秒) print(f'今年是第{s1.year}')
- 时间戳与时间互换
-
import datetime #导出当前的时间 nowtime = datetime.datetime.now() mtimestamp = nowtime.timestamp() #时间戳转换为时间格式 s = datetime.datetime.fromtimestamp(mtimestamp) print(s) #时间转换为时间戳格式 print(s.timestamp())
- 写一段代码,生成一个以时间命名的日志文件,并向日志文件内写入日志数据
-
import datetime #导出当前的时间 nowtime = datetime.datetime.now() f = open(f"{nowtime}", "w") log_content=input('请输入该文件的内容') f.write(f'{log_content}') f.close()
import datetime #导出当前的时间 nowtime = datetime.datetime.now() log_name = c_time+'.log' with open(log_name,'w+',encoding='utf-8')as f: # 日志信息包括:datetime [level] line:13 this is a log message message = f'{nowtime} [info] [level] line:13 this is a log message' f.write(message) f.close()
with open() as f:
是 Python 中打开文件的一种常用方式。它使用了上下文管理器的语法,能够自动地在打开和关闭文件时调用相应的清理操作。用法如下:
with open(文件名, 模式) as 变量名: 变量名.操作()
其中,文件名是要打开的文件的名称,模式是文件的打开模式。比如"r"表示只读模式, "w"表示只写模式, "a"表示追加模式等.
在 with 语句的代码块中,可以对打开的文件进行读写操作,如:
with open('example.txt', 'r') as f: print(f.read())
这个例子中打开了文件example.txt,并且读取里面的所有内容。
当代码执行完 with 语句的代码块后,文件会自动关闭。因此,不需要再单独写f.close()来关闭文件。
- python中处理时间的模块
json
概念:json是用于存储和交换数据的语法,是一种轻量级的数据交换格式
使用场景:
- 接口数据传输
- 序列化
- 配置文件
json的结构
#键值对形式
#数组形式
{
"language": [
{
"name": "python",
"url": "https://www.python.org/"
},
{
"name": "java",
"url": "https://www.java.com/zh-CN/"
}
]
}
python与json数据类型对应
- 定义一个python结构对象
import json
# 定义一个python结构的对象
data = {
'a': 1,
'b': ['1', '2', '3'],
'c': True,
'd': False,
'e': None
}
- 将python结构对象编码为json格式
# 将python对象编码为json结构的字符串
json_data = json.dumps(data)
print(json_data)
- json结构的输出为
{"a": 1, "b": ["1", "2", "3"], "c": true, "d": false, "e": null}
- 与python结构对象有什么区别
- 首先键值必须用双引号""括起来
- pytho结构的布尔类型True转化为true
- python结构的空置None转化为null
- json.dumps(obj,ensure_ascii=True/False,indent=x)
- ensure_ascii=False //代表支持中文输入输出
- indent = x 代表缩进x个空格
-
import json # 定义一个python结构的对象 data = { 'a': 1, 'b': ['1', '2', '3'], 'c': True, 'd': False, 'e': None, 'f': '霍格沃滋' } json_data = json.dumps(data, ensure_ascii=False, indent=4) print(json_data) 运行结果是: { "a": 1, "b": [ "1", "2", "3" ], "c": true, "d": false, "e": null, "f": "霍格沃滋" }
- 将json格式转化为python //json.loads(str:string)
-
json_data = '''{"a": 1, "b": ["1", "2", "3"], "c": true, "d": false, "e": null}''' #json_data为字符串类型对象,json.loads的传参对象为字符串类型 data = json.loads(json_data) print(type(data),data)
- 输出为:
-
<class 'dict'> {'a': 1, 'b': ['1', '2', '3'], 'c': True, 'd': False, 'e': None}
- 将python对象转化为json格式的数据并且写入json文件中
-
with open('json.data','w') as f: json.dump(data,f)
- 输出结构为
- 创建了一个data.json的文件,并且将python对象转化为json并保存在data.json文件中
-
- 将json文件转化为python对象
-
with open('json.data','r') as f: data = json.load(f) print(data)
- 注意json.load()传参的对象是一个文件,json.loads()传参的对象是一个json结构
正则表达式re
正则表达式
- 概念:正则表达式就是记录文本规则的代码
- 可以查找操作符合某些复杂规则的字符串
- 使用场景
- 处理字符串
- 处理日志
使用re模块实现正则表达式操作
python——正则表达式(re模块)详解_python re正则表达式_nee~的博客-CSDN博客
- 原生字符串需要在字符串前方加上r'string'
- 正则表达式对象转换
- compile():将字符串转换为正则表达式对象
- 需要多次使用这个正则表达式的场景
-
import re #去搜索包含hogwarts的字符串 pattern = r"Hogwarts" #将pattern作为正则对象传给prog prog = re.compile(pattern) #后面prog可以直接调用re的方法
- 所包含的参数
- match():从字符串的开始处进行匹配
-
import re #匹配以hog开头的字符串 pattern = r"hog\w+" s1 = "hogwarts is a best shcool in my heart" match1 = re.match(pattern,s1,re.I) print(match1) s2 = "i like hogwarts very well" match2 = re.match(pattern,s2,re.I) print(match2) 运行结果是: <re.Match object; span=(0, 8), match='hogwarts'> None #因为match只匹配开头的数据
注意r"xxx\w+"想要查找包含xxx的字符串后面一定要跟‘\W+’
-
print(f'开始进行匹配的位置{match1.start()}') print(f'开始进行结束的位置{match1.end()}') print(f'匹配位置的元组为{match1.span()}') print(f'匹配位置的字符串为{match1.string}') print(f'匹配的数据为{match1.group()}') 运行结果是: 开始进行匹配的位置0 开始进行结束的位置8 匹配位置的元组为8 匹配位置的字符串为hogwarts is a best shcool in my heart 匹配的数据为hogwarts
- search():在整个字符串中搜索第一个匹配的值
-
import re #匹配以hog开头的字符串 pattern = r"hog\w+" s1 = "hogwarts is a best shcool in my heart" match1 = re.search(pattern,s1,re.I) print(match1) match2 = re.search(pattern,s2,re.I) print(match2) s3 = "i like hogwarts Hogwarts very well" #但是对第二次出现的关键字将不进行匹配 match3 = re.search(pattern,s3,re.I) print(match3) 运行结果是: <re.Match object; span=(0, 8), match='hogwarts'> <re.Match object; span=(7, 15), match='hogwarts'>
-
- findall():在整个字符串中搜索所有符合正则表达式的字符串,返回列表
-
s2 = "i like hogwarts hogwarts very well" match2 = re.search(pattern,s2,re.I) print(match2) match2_list = re.findall(pattern,s2,re.I) print(match2_list,match2.span()) 运行结果是: ['hogwarts', 'hogwarts'] (7, 15)
-
- 替换字符串 sub():实现字符串替换
pattern = r'1[345678]\d{9}'#1开头 第二个字母从[3,4,5,6,7,8]中人选一个,后面跟着任意9个数据类型的字符 s1 = '中奖号码是12345,联系人电话是:13838646613' result = re.sub(pattern,'1xxxxxxxxxxxx',s1) print(result) 运行结果是:中奖号码是12345,联系人电话是:1xxxxxxxxxxxx
多线程threding
计算机组成原理:CPU、核心,进程、线程,串行、并发、并行_串行 并行 计算机组成原理_OceanStar的学习笔记的博客-CSDN博客
pythonlogging/pythonlogging
日志的作用:
- 调试
- 辅助定位问题
- 数据分析
日志的级别
级别 | 何时使用 |
debug | 细节信息,仅当诊断问题时使用 |
info | 确认程序预期运行 |
warning | 表明有已经或即将发生的意外,程序仍按预期运行 |
error | 由于一些严重问题,程序的某些功能已经不能正常执行 |
critical | 严重的错误,程序不能再继续执行 |
日志的使用
https://docs.python.org/zh-cn/3/howto/logging.html
日志的级别
只会打印warning及以上级别的日志信息
logging.basicConfig(level = logging.xxx)//表示只打印xx级别及其以上级别的日志
import logging
logging.basicConfig(level=logging.DEBUG)
logging.warning('Watch out!') # will print a message to the console
logging.info('I told you so') # will not print anything
logging.debug('这是一条debug级别的日志')
运行结果是:
WARNING:root:Watch out!
INFO:root:I told you so
DEBUG:root:这是一条debug级别的日志
记录日志到文件中
import logging
logging.basicConfig(filename='example.log', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
就会在该文件夹中创建example.log文件用来存放相应的日志文件
要显示日志的日期和时间
import logging
logging.basicConfig(format='%(asctime)s %(message)s')
logging.warning('is when this event was logged.')
运行结果是:
2023-07-31 16:02:40,483 is when this event was logged.
需要打印更多的时间信息需要天街更多的参数
import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('is when this event was logged.')
运行结果是:
07/31/2023 04:05:45 PM is when this event was logged.
import logging
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')
logging.info('这是一个日志')
python日志的高级功能
封装日志公共函数
import logging
import os
#定义一个记录器
def get_logger():
# create logger
print('文件处理器保存日志的路径',os.path.basename(__file__))
logger = logging.getLogger(os.path.basename(__file__))
#设置日志级别
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.FileHandler(filename='mylog.log', encoding="utf-8")
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)
return logger
logger = get_logger()
logger.debug("debug message")
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
venv环境管理
Python之虚拟环境venv实战详解_python venv_代码大师麦克劳瑞的博客-CSDN博客
pip环境管理
pip依赖管理与虚拟环境_florachy的博客-CSDN博客
常用三方库yaml(管理配置数据及测试数据)
概念:
- 一种数据序列化格式
- 用于人类的可读性和与脚本语言的交互
- 一种被认为可以超越XML\JSON的配置文件
yaml基本语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- #表示注释,从这个字符一直到行尾,都会被解析器忽略
YAML支持的数据结构
- 对象:简直对的集合,用冒号:表示
- 数组:一组按次序排列的值,前加“-”
- 纯量:单个的、不可再分的值
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
- 日期
# 编程语言
languages:
- PHP
- Java
- Python
book:
Python入门: # 书籍名称
price: 55.5
author: Lily
available: True
repertory: 20
date: 2018-02-17
Java入门:
price: 60
author: Lily
available: False
repertory: Null
date: 2018-05-11
PyYAML安装方式
- python的YAML解析器和生成器
- 官网:https://pypi.org/project/PyYAML/
- 安装:pip install pyyaml
将对象用python转化成yaml对象
import yaml
data = {
"client": {"default-character-set": "utf8"},
"mysql": {"user": 'root', "password": 123},
"custom": {
"user1": {"user": "张三", "pwd": 666},
"user2": {"user": "李四", "pwd": 999},
}
}
# 直接 dump 可以把对象转为 YAML 文档
with open('./my.yaml','w',encoding='utf-8') as f:
yaml.dump(data,f)//需要传递传入的对象,及数据流
在对应的目录下创建了一个名为my.yaml的文件
该yaml文件的格式为:
client:
default-character-set: utf8
custom:
user1:
pwd: 666
user: "\u5F20\u4E09"
user2:
pwd: 999
user: "\u674E\u56DB"
mysql:
password: 123
user: root