python基础day05
1.datetime模块:
- datetime模块可以更方便的显示日期并对日期进行运算。
类名 | 功能描述 |
datetime.datetime | 表示日期时间的类 |
datetime.timedelta | 表示时间间隔的类 |
datetime.date | 表示日期的类 |
datetime.time | 表示时间的类 |
datetime.tzinfo | datetime.tzinfo |
- datetime的代码示例:
from datetime import datetime
# 获取当前时间
dt=datetime.now()
print("当前的系统时间:",dt) # 2025-06-04 13:24:40.043445# 获取datetime类型对象的年月日时分秒
dt2=datetime(2025,6,4,13,23)
print("年:",dt2.year,"月:",dt2.month,"日:",dt2.day) # 年: 2025 月: 6 日: 4
print("时:",dt2.hour,"分:",dt2.minute,"秒:",dt2.second) # 时: 13 分: 23 秒: 0# 比较两个datetime类型对象的大小
labor_day=datetime(2025,5,1,0,0,0)
nation_day=datetime(2025,10,1,0,0,0)
print("五一比十一早吗?",labor_day<nation_day) # True# datetime类型转换成字符串
now_dt=datetime.now()
now_dt_str=now_dt.strftime("%Y-%m-%d %H:%M:%S")
print(type(now_dt)) # <class 'datetime.datetime'>
print(type(now_dt_str)) # <class 'str'># 字符串转换成datetime类型
str_dt="2025年10月1日 12点23分56秒"
dt3=datetime.strptime(str_dt,"%Y年%m月%d日 %H点%M分%S秒")
print(type(dt3)) # <class 'datetime.datetime'>
- timedelta的代码示例:
from datetime import datetime
from datetime import timedelta
# 计算两个datetime日期之间的天数
days=datetime(2025,10,1)-datetime(2025,5,1)
print(type(days),days) # <class 'datetime.timedelta'> 153 days, 0:00:00# 通过传入参数的方式创建一个timedelta对象
td1=timedelta(10)
td2=timedelta(10,11)
print(td1) # 10 days, 0:00:00
print(td2) # 10 days, 0:00:11
2.第三方模块的安装与卸载:
- 简介:第三方模块由全球Python爱好者、程序员、各行各业的专家进行开发并进行维护。
- 安装第三方模块:pip install 模块名称,如:pip install requests
- 卸载第三方模块:pip uninstall 模块名称
- 升级pip命令:python -m pip install --upgrade pip
3.第三方模块requests:
- 简介:requests被称为requests库,是用于处理HTTP(Hypertext TransferProtocol超文本传输协议)请求的第三方库,该库在爬虫程序中应用非常广泛。
- 使用步骤:使用requests库中的get()函数可以打开一个网络请求,并获取一个Response响应对象。响应结果中的字符串数据可以通过响应对象的text属性获取,响应结果中除了有字符串数据也有二进制数据,响应结果中的二进制数据可以通过响应对象的content属性获取。
- 使用requests爬取景区天气预报:
# 爬取景区天气预报
import requests
import re
url="https://www.weather.com.cn/weather1d/101010100.shtml"
resp=requests.get(url)
resp.encoding="utf-8"city=re.findall('<span class="name">([\u4e00-\u9fa5]*)</span>',resp.text)
weather=re.findall('<span class="weather">([\u4e00-\u9fa5]*)</span>',resp.text)
wd=re.findall('<span class="wd">(.*)</span>',resp.text)
zs=re.findall('<span class="zs">([\u4e00-\u9fa5]*)</span>',resp.text)ls=[]
for a,b,c,d in zip(city,weather,wd,zs):ls.append([a,b,c,d])for item in ls:print(item)# 结果为:
['景区', '天气', '气温', '旅游指数']
['三亚', '多云', '33/26℃', '较适宜']
['九寨沟', '多云', '24/12℃', '适宜']
['大理', '小雨转阵雨', '24/15℃', '适宜']
['张家界', '多云', '30/21℃', '适宜']
['桂林', '多云', '34/23℃', '较适宜']
['青岛', '晴', '30/19℃', '适宜']
- 使用requests爬取百度的logo图片:
# 爬取百度的logo
import requests
url="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
resp=requests.get(url)
with open("logo.png","wb") as file:file.write(resp.content)
4.第三方模块openpyxl:
- 简介:openpyxl模块是用于处理Microsoft Excel文件的第三方库,可以对Excel文件中的数据进行写入和读取。
函数/属性名称 | 功能描述 |
load_workbook(filename) | 打开已存在的表格,结果为工作簿对象 |
workbook.sheetnames | 工作簿对象的sheetnames属性,用于获取所有工作表的名称,结果为列表类型 |
sheet.append(lst) | 向工作表中添加一行数据,新数据接在工作表已有数据的后面 |
workbook.save(excelname) | 保存工作簿 |
Workbook() | 创建新的工作簿对象 |
-
将爬取的景区天气预报存储到excel中:
import weather # 自定义weather模块,用来获取和解析天气预报数据
import openpyxl
html=weather.get_html() # 发送请求,获得相应结果
lst=weather.parse_html(html) # 解析数据workbook=openpyxl.Workbook() # 创建一个新的工作簿
sheet=workbook.create_sheet("景区天气") # 在Excel文件中创建工作表for item in lst: sheet.append(item) # 向工作表中添加数据workbook.save("景区天气.xlsx") # 保存工作表
-
从Excel文件中读取数据:
# 从Excel文件中读取数据:
import openpyxl
workbook=openpyxl.load_workbook("景区天气.xlsx") # 打开工作薄
sheet=workbook["景区天气"] # 选择要操作的工作表
lst=[] # 存储行数据
for row in sheet.rows: # 表格数据是二位列表,先遍历行,再遍历列sublst=[] # 存储单元格数据for cell in row:sublst.append(cell.value)lst.append(sublst)for item in lst:print(item)
5.第三方模块pdfplumber:
- 简介:pdfplumber可用于从PDF文件中读取内容
- 读取pdf内容:
# 读取pdf内容
import pdfplumber
with pdfplumber.open("ChatGPT从入门到精通(1).pdf") as pdf: # 打开pdf文件for i in pdf.pages: # 遍历页print(i.extract_text()) # extract_text()方法提取内容print(f"---------第{i.page_number}页")
6.第三方模块numpy:
- 简介:是Python数据分析方向和其它库的依赖库,用于处理数组矩阵等数据
- 图像的灰度处理:
import numpy as np
import matplotlib.pyplot as plt
# 读取图片
n1=plt.imread("cake.jpg") # n1是三维数组,最高维度表示图像的高,次高维度表示图像的宽,最低维度表示[R,G,B]颜色
plt.imshow(n1)# 编写灰度公式
n2=np.array([0.299,0.587,0.114])
# 将数组n1(RGB)颜色值与数组n2(灰度公式固定值),进行点乘运算
x=np.dot(n1,n2)
# 传入数组,显示灰度
plt.imshow(x,cmap="gray")
# 显示图像
plt.show()
7.Pandas与Matplotlib:
- Pandas是基于Numpy模块扩展的一个非常重要的数据分析模块,使用Pandas读取Excel数据更加的方便。
- Matplotlib是用于数据可视化的模块,使用Matplotlib.pyplot可以非常方便的绘制饼图、柱形图、折线图等。
import pandas as pd
import matplotlib.pyplot as plt
# 读取Excel文件
df=pd.read_excel("JD手机销售数据.xlsx")
# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置画布大小
plt.figure(figsize=[10,6])
labels=df["商品名称"]
y=df["北京出库销量"]# 绘制饼图
plt.pie(y,labels=labels,autopct='%1.1f%%',startangle=90)# 设置x,y轴刻度
plt.axis('equal')
plt.title("京东手机销售占比图")
# 显示饼图
plt.show()
8.第三方模块PyEcharts:
- 简介:PyEcharts是由百度开源的数据可视化库,它对流行图的支持度比较高,它给用户提供了30多种图形,如柱形渐变图K线周期图等。
- 中文官方文档:https://pyecharts.org/#/zh-cn/
- 使用步骤:
(1)导入pyecharts包
(2)找到相应图形模板
(3)准备相应数据
(4)对图表进行个性化修饰
- 示例代码:
from pyecharts import options as opts
from pyecharts.charts import Pie
lst=[["苹果",200],["华为",409],["oppo",234],["小米",210]]
c = (Pie().add("", lst).set_global_opts(title_opts=opts.TitleOpts(title="京东销售数据占比")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")).render("phone.html")
)
9.第三方模块PIL:
- 简介:是用于图像处理的第三方库,它支持图像存储、处理和显示等操作。
- 安装:pip install pillow
- 图像的颜色交换示例代码:
# 图像的颜色交换
from PIL import Image
# 加载图片
im=Image.open('cake.jpg')
# 提取RGB图像的颜色通道,返回结果是图像的副本
r,g,b=im.split()
# 合并通道
om=Image.merge('RGB',(r,b,g))
om.save("new_cake.jpg")
10.第三方模块jieba:
- 简介:jieba是Python中用于对中文进行分词的模块,它可以将一段中文文本分隔成中文词组的序列。
- 中文分词示例代码:
import jieba
# 读取文件
with open("华为笔记本.txt",'r',encoding='utf-8') as file:s=file.read()print(s)# 分词
lst=jieba.__lcut(s)# 去重操作
set1=set(lst)d={}
for item in set1:if len(item)>2:d[item]=0for item in lst:if item in d:d[item]=d.get(item)+1new_lst=[]
for item in d:new_lst.append([item,d[item]])# 列表排序
new_lst.sort(key=lambda x:x[1],reverse=True)
print(new_lst[0:11])
11.第三方模块PyInstaller:
- 简介:第三方库Pyinstaller可以在Windows操作系统中将Python源文件打包成.exe的可执行文件。还可以在Linux和MacOS操作系统中对源文件进行打包操作。
- 打包的语法结构:pyinstaller -F 源文件文件名
- 注意事项:在进行文件打包时,需要打包的文件尽量不要有中文,而且需要打包的文件路径也尽量不要有中文,路径中包含中文有可能会导致打包失败。
12.文件:
- 简介:存储在计算机的存储设备中的一组数据序列就是文件。
- 文件分类:不同类型的文件通过后缀名进行区分。
文本文件:由于编码格式的不同,所占磁盘空间的字节数不同。
二进制文件:没有统一的编码,文件直接由0或1组成需要使用指定的软件才能打开。
- 操作文件步骤:
(1)打开文件:变量名=open(filename,mode,encoding)
(2)操作文件:变量名.read() 变量名.write(s)
(3)关闭文件:变量名.close()
- 操作文件示例代码:
# 写入文件
def my_write():file=open("test.txt","w",encoding="utf-8") # 打开(创建)文件file.write("伟大的中国梦") # 操作文件file.close() # 关闭文件# 读取文件
def my_read():file=open("test.txt","r",encoding="utf-8") # 打开(创建)文件s=file.read() # 操作文件print(s)file.close() # 关闭文件# 主程序运行
if __name__ == '__main__':# my_write()my_read()
- 文件的状态和操作过程:
- 文件的打开模式:
文件的打开模式 | 模式说明 |
r | 以只读模式打开,文件指针在文件的开头,如果文件不存在,程序抛异常 |
rb | 以只读模式打开二进制文件,如图片文件 |
w | 覆盖写模式,文件不存在创建,文件存在则内容覆盖 |
wb | 覆盖写模式写入二进制数据,文件不存在则创建,文件存在则覆盖 |
a | 追加写模式,文件不存在创建,文件存在,则在文件最后追加内容 |
+ | 与w/r/a等一同使用,在原功能的基础上增加同时读写功能 |
- 文件读写方法:
读写方法 | 描述说明 |
file.read(size) | 从文件中读取size个字符或字节,如果没有给定参数,则读取文件中的全部内容 |
file.readline(size) | 读取文件中的一行数据,如果给定参数,则为读取这一行中的size个字符或字节 |
file.readlines() | 从文件中读取所有内容,结果为列表类型 |
file.write(s) | 将字符串s写入文件 |
file.writelines(lst) | 将内容全部为字符串的列表lst写入文件 |
file.seek(offset) | 改变当前文件操作指针的位置,英文占一个字节,中文gbk编码占两个字节,utf-8编码占三个字节 |
- 文件复制:本质就是边读边写操作,注意先打开的文件后关,后打开的文件先关
def copy(src,new_path):file1=open(src,"rb") # 打开原文件file2=open(new_path,"wb") # 创建新文件s=file1.read() # 读取原文件file2.write(s) # 向新文件中写入内容file2.close() # 后打开的先关file1.close() # 先打开的后关
if __name__ == '__main__':copy("cake.jpg","new_cake.jpg")
- with语句:
简介:又称上下文管理器,在处理文件时,无论是否产生异常都能保证with语句执行完毕后关闭已经打开的文件,这个过程是自动的无需手动操作。
语法结构: with open(...) as file:
pass
示例代码:
def write_fun():with open("a.txt","w",encoding="utf-8") as file:file.write("北京欢迎你")def read_fun():with open("a.txt","r",encoding="utf-8") as file:print(file.read())def copy_fun(src_path,target_path):with open(src_path,"r",encoding="utf-8") as file:with open(target_path,"w",encoding="utf-8") as file2:file2.write(file.read())if __name__ == '__main__':write_fun()read_fun()copy_fun("a.txt","b.txt")
13.数据的组织维度及存储:
- 数据的组织维度:也称为数据的组织方式或存储方式,在Python中常用的数据组织方式可分为一维数据、二维数据和高维数据。
- 一维数据:通常采用线性方式组织数据,一般使用Python中的列表、元组或者集合进行存储数据。
- 二维数据:二维数据也称表格数据由行和列组成,类似于Excel表格,在Python中使用二维列表进行存储。
- 高维数据:高级数据则是使用Key-Value方式进行组织数据在Python中使用字典进行存储数据。在Python中内置的json模块专门用于处理JSON(JavaScriptObject Notation)格式的数据。
- json模块的常用函数:
函数名称 | 描述说明 |
json.dumps(obj) | 将Python数据类型转成JSON格式过程,编码过程 |
json.loads(s) | 将JSON格式字符串转成Python数据类型,解码过程 |
json.dump(obj,file) | 与dumps()功能相同,将转换结果存储到文件file中 |
json.load(file) | 与loads()功能相同,从文件file中读入数据 |
- 高维数据存储代码示例:
import json
lst=[{"name":"张三","age":13,"score":99},{"name":"李四","age":16,"score":90},{"name":"王五","age":21,"score":80},
]
s=json.dumps(lst,ensure_ascii=False,indent=4) # ensure_ascii正常显示中文 indent增加数据的缩进lst2=json.loads(s)