python之内置库2

一、时间模块

1、时间模块有:

1)time
2)datetime(内置库)
3)calendar:日历方面

datetime 常用的类

1)datetime.datetime:表示日期时间的类
2)datetime.timedelta:表示时间间隔的类
3)datetime.date:表示日期的类
4)datetime.time:表示时间的类
5)datetime.tzinfo:时区相关的类

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

import datetime

# 获取当前时间
now = datetime.datetime.now()
print(now)
print(f'当前年份是{now.year}年')
print(f'当前月份是{now.month}月')
print(f'当前是{now.day}号')
# 获取当前时间的时间戳
print(now.timestamp())
# 获取指定时间
print(datetime.datetime(2023, 5, 20))

练习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')

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

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

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

import datetime

# 获取当前时间的时间戳
now = datetime.datetime.now()
# 将时间戳转为str格式
str1 = now.strftime('%Y %m %d %H:%M:%S')
# 以日期生成文件名称时,时间不能加符号
str12 = now.strftime('%Y%m%d_%H%M%S')
print(f'当前时间为{str12}')

# 生成日志文件
log_time = str12 + '.log'
with open(log_time, 'w+', encoding='utf-8') as f:
    message = f'{now} [info] line: 13 this is a message'
    f.write(message)

内置库-json

一、json概述

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

二、json结构

键值对形式
数组形式

三、 Python 与 JSON 数据类型对应

图片

四、 json 库

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

五、常用方法

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

json和python相互转化

import json

date = {'a': 1, 's': [1, 2, 3, 4], 'd': True, 'f': False, 'w': None, 'qw': 2.35}
# 将python对象转为json,indent是换行显示
json_date = json.dumps(date, indent=4)
print(json_date)

# 把date数据写入json文件中
with open('date.json', 'w', encoding='utf-8')as f:
    json.dump(date, f)

# 读取json文件
with open('date.json', 'r')as f:
    data = json.load(f)
    print(data)

# 将json转化为python类型
json_num = '''{"a": 1, "s": [1, 2, 3, 4], "d": true, "f": false, "w": null, "qw": 2.35}'''
python_date = json.loads(json_num)
print(python_date)
----------------------------------------->
{
    "a": 1,
    "s": [
        1,
        2,
        3,
        4
    ],
    "d": true,
    "f": false,
    "w": null,
    "qw": 2.35
}
{'a': 1, 's': [1, 2, 3, 4], 'd': True, 'f': False, 'w': None, 'qw': 2.35}
{'a': 1, 's': [1, 2, 3, 4], 'd': True, 'f': False, 'w': None, 'qw': 2.35}

内置库-re

正则表达式

一、概念

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

二、使用场景

处理字符串
处理日志

三、 在 python 中使用正则表达式

把正则表达式作为模式字符串
正则表达式可以使用原生字符串来表示
原生字符串需要在字符串前方加上 r'string'

正则表达式对象转换

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

str1 = r'sakasjkajs'
prog = re.compile(str1)

匹配字符串

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

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

import re

str1 = r'sa'
str2 = 'sasssssssaaaaaaaaa'
str3 = 'str'

# re.I代表忽略大小写
# search方法返回搜索到的第一个信息
# findall方法返回搜索到的所有信息
match1 = re.match(str1, str2, re.I)
match3 = re.search(str1, str2, re.I)
match4 = re.findall(str1, str2, re.I)
print(match1)
print(match3)
print(match4)
# 打印match信息
print(f'匹配值的起始位置:{match1.start()}')
print(f'匹配值的结束位置:{match1.end()}')
print(f'匹配值的元祖为:{match1.span()}')
print(f'匹配值的字符串为:{match1.string}')
print(f'匹配值的数据为:{match1.group()}')

# match方法是匹配开头,如果开头不是sa就会返回none
match2 = re.match(str1, str3, re.I)
print(match2)
-------------------------------->
<re.Match object; span=(0, 2), match='sa'>
<re.Match object; span=(0, 2), match='sa'>
['sa', 'sa']
匹配值的起始位置:0
匹配值的结束位置:2
匹配值的元祖为:(0, 2)
匹配值的字符串为:sasssssssaaaaaaaaa
匹配值的数据为:sa
None

替换字符串

sub():实现字符串替换

import re

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

re.sub(pattern, repl, string, [count], [flags])
patten = r'1[3579]\d{9}'
# 替换
s1 = '中奖号码是135686,联系电话是:13911111111'
result = re.sub(patten, '139xxxxxxxx', s1)
print(result)

分割字符串

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

import re

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

re.split(pattern, string, [maxsplit], [flags])
# 分割
patten1 = r'[?|=]'
url = 'https://mini.eastday.com/?qid=02157&jumpuk=230531071559323233648'
result2 = re.split(patten1, url)
print(result2)