模块

1、模块的导入
import导入方式的语法结构
import 模块名称 [as 别名]

from...import导入方式的语法结构
from 模块名称 import 变量/函数/类/*

点击查看代码
示例my_info
name='娟子姐'

def info():
    print(f'大家好,我叫{name}')

示例10-2模块的导入
#(1)import
import my_info
print(my_info.name)
my_info.info()


import my_info as a
print(a.name)
a.info()


#(2)from...import
from my_info import name#导入的是具体变量的名称
print(name)
#info()


from my_info import  info#导入的是一个具体函数的名称
info()

#(3)通配符
from my_info import *
print(name)
info

#同时导入多个模块
import math,time,random

#导入模块都有相同函数,后一个函数会将前一个覆盖,除非打点调用


示例 introduce
name='ysj'
age=18
def info():
    print(f'姓名{name},年龄{age}')


示例10-4模块的导入
from my_info import *
from introduce import *
#导入模块中具有同名的变量和函数,后导入的会将之前的覆盖
info()

#如果不能覆盖,解决方案可以使用import
import my_info
import introduce
#使用模块中的函数或变量时,模块名打点调用
my_info.info()
introduce.info()

2、Python中的包

 #主程序运行(可以用于测试包)
 if_name_=='_main_':
      pass
点击查看代码
#%新建包new->Pathon Package(内涵#_init_.py文件)
#**在admin包内**
#_init_文件:
#print('版权:杨淑娟')
#print('讲师:ysj')

#my_admin文件:
#def info():
 #   print('大家好,我叫ysj,今年18岁')
#name='杨淑娟'

示例10-7包的导入
import admin.my_admin as a#包名.模块名 admin是包名,my_admin是模块名
a.info()

print('-'*40)
from admin import my_admin as b#from 包名import 模块as 别名
b.info()

print('-'*40)
from admin.my_admin import  info #from 包名.模块名 import 函数|变量等
info()

print('-'*40)
from admin.my_admin import *#from 包名.模块名 import *
print(name)

示例modle_a
# print('welcome to Beijing')
# name='ysj'
# print(name)

#main阻止了全局变量的值被输出执行
if __name__ == '__main__':
    print('welcome to Beijing')
    name='ysj'
    print(name)

示例modle_b
#导入的代码
import modle_a

如果一个模块文件中有_all_变量,当使用from xxx import *导入时,只能导入这个列表中的元素



Pathon中常用的内置模块

1、random模块

点击查看代码
示例10-11random模块的使用
#导入
import random
#设置随机数种子,随机数种子相同产生的随机数也相同
random.seed(10)
print(random.random())#第一个random是模块名,第二个是函数名#[0.0,1.0)
print(random.random())
print('-'*50)
random.seed(10)
print(random.randint(1,100))#[1,100]

for i in range(10):#[m,n)步长为k,m-->start-->1,k-->step-->3,n-->stop-->10
    print(random.randrange(1,10,3))#12行代码被执行10次

print('-'*50)
print(random.uniform(1,100))#[a,b]随机小数

lst=[i for i in range(1,10)]
print(random.choice(lst))#lst是列表,也称为序列

#随机排序
random.shuffle(lst)
print(lst)

random.shuffle(lst)
print(lst)

2、time模块

点击查看代码
示例10-12time模块的使用
import time
now=time.time()
print(now)

obj=time.localtime()#struct_time对象
print(obj)

obj2=time.localtime(60)#60秒 1970年,1月1日,8时1分8秒
print(obj2)
print(type(obj))

print('年份:',obj2.tm_year)
print('月份:',obj2.tm_mon)
print('日期:',obj2.tm_mday)
print('时',obj2.tm_hour)
print('分',obj2.tm_min)
print('秒',obj2.tm_sec)
print('星期',obj2.tm_wday)#[0,6]3表示星期四,2表示星期三
print('今年第几天',obj2.tm_yday)
print(time.ctime())#时间戳对应的易读的字符串


#日期时间格式化
print(time.strftime('%Y-%m-%d',time.localtime()))#str-->字符串,f-->format,time-->时间
print(time.strftime('%H:%M:%S',time.localtime()))
print('%B月份的名称',time.strftime('%B',time.localtime()))
print('%A星期的名称:',time.strftime('%A',time.localtime()))

#字符串转为struct_time
print(time.strptime('2000-08-08','%Y-%m-%d'))

time.sleep(20)#程序暂停20秒
print('helloworld')

3、datetime模块

点击查看代码
示例10-13datetime模块
from datetime import datetime#从datetime模块中导入datetime类
dt=datetime.now()
print('当前的系统时间为',dt)

#datetime是一个类,手动创建这个类的对象
dt2=datetime(2020,8,8,20,8)
print('dat2的数据类型为',type(dt2),'dat2所表示的时间为',dt2)

print('年',dt2.year,'月',dt2.month,'日',dt2.day)
print('时间',dt2.hour,'分',dt2.month,'秒',dt2.second)

#比较两个datetime类型对象的大小
labor_day=datetime(2028,5,1,0,0,0)
national_day=datetime(2028,10,1,0,0,0)
print('2028年5月1日比2028年10月1日小吗?',labor_day<national_day)#True


#datetime与字符串进行转换
nowdt=datetime.now()
nowdt_str=nowdt.strftime('%Y/%m/%d/ %H:%M:%S')
print('nowdt_str的数据类型',type(nowdt_str),'nowdt_str所表示的数据是什么',nowdt_str),

#字符串转为datetime类型
str_datetime='2028年8月8日 20点8分'
dt3=datetime.strptime(str_datetime,'%Y年%m月%d日 %H点%M分')
print('str_datetime的数据类型为',type(str_datetime),'str_datetime所表示的数据为',str_datetime)
print('dt3的数据类型为',type(dt3),'dt3所表示的数据为',dt3)

示例10-14timedelta类的使用
from datetime import datetime
from datetime import timedelta
#创建两个datetime类型的对象
deltal=datetime(2028,10,1)-datetime(2028,5,1)
print('daltal的数据类型为',type(deltal),'daltal的所表示的数据为',deltal)
print('20285月1日年之后的153天是',datetime(2028,5,1)+deltal)


#通过传入参数的方式创建一个timedelta对象
td1=timedelta(10)
print('创建10天的timedelta对象',td1)
td2=timedelta(10,11)
print('创建10天11秒的timedelta对象',td2)


第三方模块思维安装与卸载


1、requests库

点击查看代码
示例10-15爬取景区天气预报
import requests
import  re
url = 'http://www.weather.com.cn/weather1d/101010100.shtml'#爬虫打开的浏览器上的网页
resp= requests.get(url) #打开浏览器打开网址
#设置一下编码格式
resp.encoding='utf-8'
print(resp.text)#resp响应,对象名.属性名 resp.text

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)
print(city)
print(weather)
print(wd)
print(zs)

lst=[]
for a,b,c,d in zip(city,weather,zs,wd):
    lst.append([a,b,c,d])
print(lst)
for item in lst:
    print(item)
'''
<span class="name">三亚</span>
<span class="weather">多云转雷阵雨</span>
<span class="wd">32/27℃</span>
<span class="zs">适宜</span>
'''
示例10-16爬取百度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)

2、openpyxl库

点击查看代码
示例weather
  import requests
import re

#定义函数
def get_html():
    url = 'http://www.weather.com.cn/weather1d/101010100.shtml'#爬虫打开的浏览器上的网页
    resp= requests.get(url) #打开浏览器打开网址
    #设置一下编码格式
    resp.encoding='utf-8'
    return resp.text

def parse_html(html_str):#解析
    city=re.findall('<span class="name">([\u4e00-\u9fa5]*)</span>',html_str)
    weather=re.findall('<span class="weather">([\u4e00-\u9fa5]*)</span>',html_str)
    wd=re.findall('<span class="wd">(.*)</span>',html_str)
    zs=re.findall('<span class="zs">([\u4e00-\u9fa5]*)</span>',html_str)

    lst=[]
    for a,b,c,d in zip(city,weather,zs,wd):#封装
        lst.append([a,b,c,d])

    return lst
示例10-18将数据存储到Excle中
import weather
import openpyxl
html=weather.get_html()#发请求,得响应结果
lst=weather.parse_html(html)#解析数据
#创建一个新的Excle工作簿
workbook = openpyxl.Workbook()#创建对象
#在Excle文件中创建工作表
sheet = workbook.create_sheet('景区天气')
#向工作表中添加数据
for item in lst:
    sheet.append(item)#一次添加一行

workbook.save('景区天气.xlsx')

示例10-19从Excle中读取数据
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)

3、其他库

点击查看代码
示例10-20从PDF中提取数据
import pdfplumber
#打开pdf文件
with pdfplumber.open('小学数学公式.pdf') as pdf:
    for i in pdf.pages:#遍历页
        print(i.extract_text())#extract_text()方法提取内容
        print(f'-----第{i.page_number}页结束')