Module,模块
定义一个名为 m a t h _ u t i l s . p y math\_utils.py math_utils.py 的模块:
def add(a, b):
return a + b
def subtract(a, b):
return a - b
import 模块名 [as 模块新名字1]
导入一个模块到当前程序
from 模块名 import 模块属性名 [as 属性新名]
导入一个模块内部的部分属性到当前程序
from 模块名 import *
导入一个模块内部的全部属性到当前程序
模块 | 功能 | 官方文档 |
---|---|---|
math |
数学运算 | https://docs.python.org/zh-cn/3.12/library/math.html |
os |
操作系统接口 | https://docs.python.org/zh-cn/3.13/library/os.html |
os.path |
路径相关 | https://docs.python.org/zh-cn/3.13/library/os.path.html |
datetime |
日期和时间 | https://docs.python.org/zh-cn/3.13/library/datetime.html |
random |
随机数生成 | https://docs.python.org/zh-cn/3.13/library/random.html |
time |
时间 | https://docs.python.org/zh-cn/3.13/library/time.html |
示例
import math
import random
import time
import os
# 随机数模块
def random_fn():
# 随机数
# 设置随机数种子
# random.seed(42)
re=random.random()#随机生成[0,1)
print(re)
# [-5, 6)
re=random.random()*(6-(-5))+(-5)
print(re)
re=random.randint(10,20)
print(re)
arr=[10,203,10,40,43,4,32,41,31,42]
re=random.choice(arr)
print(re)
random.shuffle(arr)
print(arr)
# math模块
def math_fn():
print(math.pi)
print(math.e)
print(math.sqrt(2))
print(math.log(2))
deg=math.pi/180
print(math.sin(90*deg))
# time模块
def time_fn():
t=time.time()#1970-1-1 08:00:00 到 这个代码运行的时候 过了多少秒
# print(t)
# for _ in range(10000):
# c=100+200
# time.sleep(2)#让程序暂停5秒钟
print(time.time()-t)
print(time.localtime())
# 获取年份
print(time.localtime().tm_year)
print(time.strftime("%Y年%m-%d %H:%M:%S"))
print(time.strftime("%H点%M分%S秒"))
# os用于操作计算机的一些东西(文件,目录)
def os_fn():
path=os.getcwd()
print(f"===={path}===")
re=os.path.join("./img","1.jpg")#拼接
re=os.path.join("img","a","1.jpg")
re=os.path.join(path,"img","1.jpg")
re=os.path.relpath(re)#转换为相对路径
print(re)
# os.mkdir("./img2")#创建文件夹
re=os.listdir("./img")
print(re)
# 思考: os.walk()
if __name__=="__main__":
random_fn()
math_fn()
time_fn()
os_fn()
模块 | 功能 | 示例 |
---|---|---|
numpy |
数值计算 | 科学运算、矩阵操作 |
pandas |
数据分析 | 数据清洗与处理 |
matplotlib |
数据可视化 | 绘制图表 |
requests |
HTTP请求处理 | 爬取网页内容,调用API |
flask |
Web应用框架 | 快速搭建Web服务 |
Package
定义:
作用:用于组织模块的集合,形成层次化的结构,便于管理大型项目。
结构:
my_package/
__init__.py
module1.py
module2.py
subpackage/
__init__.py
module3.py
import
关键字可以导入包和子包,以访问其中的模块和内容。 # 同模块的导入规则
import 包名 [as 包别名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]
# 导入包内的所有子包和模块
from 包名 import *
from 包名.模块名 import *
参考案例:
# 导入包中的模块
import matplotlib.pyplot as plt
# 导入子包中的模块
from sklearn.linear_model import LinearRegression
_ _ i n i t _ _ . p y \_\_init\_\_.py __init__.py 用于初始化Python包或模块,作用有:
__all__
变量明确指定从包中可以导入哪些模块,从而限制包的公开接口。__init__.py
中定义的变量和函数可以在包的模块中共享。__init__.py
文件中批量导入模块,这些模块可以更方便地使用。示例代码:
# __init__.py 文件示例
# 1. 批量导入系统模块
import os
import sys
import datetime
# 2. 定义包级别的变量
package_variable = "This is a package variable"
# 3. 控制包的导入行为
__all__ = ['module1', 'module2']
# 4. 执行初始化代码
print("Initializing mypackage")
# 注意:这个代码会在包被导入时执行
# 5. 导入包内的模块
from . import module1
from . import module2
模块 | 包 |
---|---|
一个Python文件 | 一个包含__init__.py 的文件夹 |
提供基本功能单元 | 用于组织多个模块 |
文件名为.py |
目录名 |
正则表达式在网络爬虫、数据分析中有着广泛使用,掌握正则表达式能够达到事半功倍的效果。
方法 | 功能 |
---|---|
match() | 判断一个正则表达式是否从开始处匹配一个字符串 |
search() | 遍历字符串,找到正则表达式匹配的第一个位置,返回匹配对象 |
findall() | 遍历字符串,找到正则表达式匹配的所有位置,并以列表的形式返回。如果给出的正则表达式中包含子组,就会把子组的内容单独返回,如果有多个子组就会以元组的形式返回。 |
finditer() | 遍历字符串,找到正则表达式匹配的所有位置,并以迭代器的形式返回 |
示例1
# 正则表达式模块-regular expression
import re
a = re.findall(r'\d+', 'runoob 123 google 456') # 输出结果:['123', '456'] \d+表示匹配数字,+表示匹配一个或多个数字
print(a)
b = re.findall("xiaoming","xiaoming是我家小明")
print(b)
c = re.match(r'www', 'www akldjlaksjxzlkiii')
print(c) #
print(c.span()) # 输出结果:(0, 3)
d = re.search(r'w', 'd awdj alkklaslkdiwa')
print(d)
e = re.finditer(r'w', 'd awdj alkklaslkdiwa')
print(e)
for i in e:
print(i.span())
示例2
# 规则
import re
# 12a3 的子串是"12a3"
a = re.findall("12a3","dawda12a3j lkasjdlk 12a3")
print(a) # ['12a3', '12a3'] 找到几个就打印几个
#[小明] 的子串是"小" "明"
a = re.findall("[小明]","dawda小明j lkasjdlk 明")
print(a) # ['小', '明', '明']
#[^小明] 的子串 是除"小" "明"外的其他字符
a = re.findall("[^小明]","dawda小明j lkasjdlk 明")
print(a) #['d', 'a', 'w', 'd', 'a', 'j', ' ', 'l', 'k', 'a', 's', 'j', 'd', 'l', 'k', ' ', ' ']
# [a-z] 匹配小写字母 [A-Z] 匹配大写字母 [0-9] 匹配数字
a = re.findall("[a-z]","dawda小明j lkasjdlk 明")
print(a)
# .小明 . 匹配除换行符之外的任何单个字符
a = re.findall(".小明","dawda小明j lkasjdlk 明")
print(a) #['a小明']
# .+小明 .+ 匹配前面的字符一次或多次
a = re.findall(".+小明","dawda小明j lkasjdlk 明")
print(a) # ['dawda小明']
特殊字符 | 含义 |
---|---|
\d | 匹配任何十进制数字;相当于类 [0-9] |
\D | 与 \d 相反,匹配任何非十进制数字的字符;相当于类 [^0-9] |
\s | 匹配任何空白字符(包含空格、换行符、制表符等);相当于类 [ \t\n\r\f\v] |
\S | 与 \s 相反,匹配任何非空白字符;相当于类 [^ \t\n\r\f\v] |
\w | 匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式[a-zA-Z0-9_] |
\W | 于 \w 相反 (注:re.ASCII 标志使得 \w 只能匹配 ASCII 字符) |
\b | 匹配单词的开始或结束 |
\B | 与 \b 相反 |
示例
import re
# * 匹配前面的字符0次或多次
arr = re.findall("66*6", "示例文本66666")
print(arr)
# + 匹配前面的字符1次或多次
arr = re.findall("[0-5]+jpg", "示例文本1231622jpg")
print(arr)
# ? 匹配前面的字符0次或1次
arr = re.findall("6?jpg", "示例文本12316226jpg")
print(arr)
# {n} 匹配前面的字符n次
arr = re.findall("6{3}jpg", "示例文本1231622666jpg")
arr = re.findall("哈{3}", "示例文本哈哈哈1231622666jpg")
print(arr)
# {n,} 匹配前面的字符n次或者多次
arr = re.findall("(abc){3,}", "示例文本哈哈abcabcabc哈1231622666jpg")
print(arr)
解释如下图所示
匹配规则 | 描述 | 示例文本 | 输出结果 |
---|---|---|---|
66*6 |
匹配前面的字符0次或多次 | 示例文本66666 | [‘66666’] |
[0-5]+jpg |
匹配前面的字符1次或多次 | 示例文本1231622jpg | [‘1231622jpg’] |
6?jpg |
匹配前面的字符0次或1次 | 示例文本12316226jpg | [‘6jpg’] |
6{3}jpg |
匹配前面的字符3次 | 示例文本1231622666jpg | [‘666jpg’] |
哈{3} |
匹配前面的字符3次 | 示例文本哈哈哈1231622666jpg | [‘哈哈哈’] |
(abc){3,} |
匹配前面的字符3次或多次 | 示例文本哈哈abcabcabc哈1231622666jpg | [‘abcabcabc’] |