模块编写完成就可以被其他模块进行调用并使用被调用模块的功能。
import导入方式的语法结构:
import模块名称【as别名】
from……import导入方式的语法结构:
from模块名称,import变量/函数/类/*(*是通配符)
import test2 #自己创建一个test2.py文件就不会报错了,也可以修改名字,只要是。py结尾的就好
print(test2.name) #在test2文件中写入代码:name='xx'
test2.info()
#在test2文件中写入:
# def info():
# print(f'hhh_{name}')
import test2 as a
print(a.name)
a.info()
#这两种情况的结果完全一样
#(2)from..import
from test2 import name #导入的是一个具体的变量名称
print (name)
# info() #NameError: name 'info' is not defined
from test2 import info
info()
#通配符
from test2 import *
#以上代码可以导入模块中的所有
print(name)
info()
#同时导入多个模块
import math,time,random
新建文件:
add.py
name='xx'
age=18
def info():
print(f'姓名:{name},年龄:{age}')
#通配符
from test2 import *
from add import *
#导入模块中具有同名的变量和函数,后导入的会将之前导入的进行覆盖
print(name)
info()
#如果不想覆盖,解决方案,可以使用import
import test2
import add
#使用模块中的函数或变量时,模快名打点调用
test2.info()
add.info()
模块可以避免函数内变量名称相冲突的问题
包可以避免模块名称相冲突的问题
init.py文件内容
print('xxx')
print('yyy')
my_admin.py文件
def info():
print("abc")
name='xx'
add.py
import admin.my_admin as a #包名.模块名
a.info()
#结果
# xxx
# yyy
# abc
print('-'*40)
from admin import my_admin as b #from 包名 import 模块 as 别名
b.info()
# abc
print('-'*40)
from admin.my_admin import info #from模块名称,import变量/函数/类/*(*是通配符)
info()
# abc
from admin.my_admin import *
print(name)
# xx
被调用文件的内容
# name='xx'
# print(name)
if __name__=='__main__':#阻止了全局变量的直接调用
name='xx'
print(name)
#在导入其他模块时不希望执行的代码,就放在这里
调用文件的内容:
import test2
random
import random
random.seed(10)
print(random.random())#0.5714025946899135#[0.0,1.0)
print(random.random())#0.4288890546751146
#按住ctrl点击random()可以查看内置文件random.py,在这里标量的一行,重复以上步骤,可以调出random.pyi
print('-'*40)
random.seed(10)
print(random.randint(1,100)) #[1,100]
for i in range(10):#[m,n)步长为k,m-->start-->1,n-->stop-->10,k-->step-->,
print(random.randrange(1,10,3))#start,stop,step #12行代码执行了10次
print(random.uniform(1,100)) #[a,b]随机小数
lst=[i for i in range(1,11)]
print(random.choice(lst)) #lst是列表,称为序列
random.shuffle(lst)
print(lst)
random.shuffle(lst)
print(lst)
time
import time
now=time.time()
print(now)
obj=time.localtime() #它是struct_time对象
print(obj)
obj2=time.localtime(60)#60秒
print(obj2)
print(type(obj2))
print('年份:',obj2.tm_year)
print('月',obj2.tm_mon)
print('日',obj2.tm_mday)
print('时',obj.tm_hour)
print('分',obj2.tm_min)
print('秒',obj2.tm_sec)
print('星期',obj2.tm_wday)#[0,6]计算
print('今年的多少天',obj2.tm_yday)
print(time.ctime())#转化为简单容易读的字符串 wed oct 25 12:13:19 2023
print(time.strftime('%Y-%m-%d',time.localtime()))#str-->字符串,f-->format
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('2008-08-08','%Y-%m-%d'))
# time.struct_time(tm_year=2008, tm_mon=8, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=221, tm_isdst=-1)
time.sleep(20)#休眠,程序20秒后执行
print('hello')
datetime
from datetime import datetime
#从模块中导入类
dt=datetime.now()
print('当前的系统时间',dt)
#datetime是一个类,手动创建;类的对象
dt2=datetime(2028,8,8,20,8)
print('dt2的数据类型',type(dt2),'dt2所表示的日期时间',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('五月一日比十月一日早吗?',labor_day<national_day)#Ture
#datetime类型与字符串类型进行转换
nowdt=datetime.now()
nowdt_str=nowdt.strftime('%Y/%m/%d %H:%M:%S')
print('nowdt的数据类型',type(nowdt),'nowdt所表示的数据是什么?',nowdt)
print('nowdt_str:的数据类型',type(nowdt_str),'nowdt_str所表示的数据是什么?',nowdt_str)
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('st3的数据类型',type(dt3),'dt3所表示的数据',dt3)
from datetime import datetime
from datetime import timedelta
#创建两个datetime类型的对象
delta1=datetime(2028,10,1)-datetime(2028,5,1)
print('deta1的数量类型',type(delta1),'delta1所表示的数据是',delta1)
print('2028年5月1日之后的153是',datetime(2028,5,1)+delta1)
# deta1的数量类型 <class 'datetime.timedelta'> delta1所表示的数据是 153 days, 0:00:00
# 2028年5月1日之后的153是 2028-10-01 00:00:00
#通过传入参数的方式
dt1=timedelta(10)
print('创建一个10天的timedelta对象',dt1)
dt2=timedelta(10,11)
print('创建一个10天11秒的timedelta对象',dt2)
# 10 days, 0:00:11
下载与爬虫有关的模块的命令:win+r-->cmd-->pip install requests
卸载命令:pip uninstall requests
升级的命令:python -m pip install --upgrade pip
requests库,用于处理HTTP(超文本传输协议)请求的第三方库。
request库中的get()函数可以打开一个网路请求,并获取一个response响应对象,
响应结果中的字符串数据可以通过响应对象的text属性获取,响应结果中的二进制数据可以通过响应对象的content属性获取。
#爬取景区的天气预报
import requests
import re #使用正则表达式的模块
url='要爬取的网址'
resp=requests.get(url)
print(resp.text)
#设置为中文的编码格式
resp.encording='utf-8'
print(resp.text)
a=re.findall('以span class=''……字样的格式字符串''格式字符串',resp.text)
#将提取到的数据进行打包
lst=[]
for a,b,c,d in zip(a): #a可以是很多歌任意
lst.append([a,b,c,d]) #四个变量,一个列表
print(lst)
for item in lst:
print(item)
在要爬取的网页里鼠标右键最下面有一个《检查》找到左上角款款带小箭头的,点击,然后选择要爬取的部分,然后在检查的代码中找到span class=''……'',看它的类型。
只要中文的模式字符串用:[\u4e00-\u9fa5]*代替相应的中文
用.*代替任意字符串
import requests
url='图片网址'
resp=requests.get(url)
#保存到本地
with open('logo.png','wb') as file:#logo.png-->名字,wb-->写到本地,b-->二进制
file.write(resp.content)