一、自带电池
"自带电池"指python语言的标准库,因为它包含了丰富的功能和工具,几乎可以满足大部分的开发需求,就像一个内置电池一样,所以python标准库被称之为"自带电池"。
二、操作系统接口
2.1 OS
python中的os模块提供了丰富的与操作系统交互的函数。开发人员可以通过os模块提供的函数对文件和目录执行系统命令,以及获取系统信息。
**注:**在调用时一定要使用 import os 而不能使用from os import *。这将避免内建的open()函数被os.open()隐式替代。(open和os.open的作用是有很大区别的)
os模块的常用函数和方法有:
-
os.name:返回当前操作系统的名称,例如posix表示Linux、Unix或Mac OS X,nt表示Windows。
-
os.getcwd():返回当前工作目录的路径。
-
os.chdir(path):改变当前工作目录到指定的路径。
-
os.listdir(path):返回指定路径下的文件和目录列表。
-
os.mkdir(path):创建一个新目录。
-
os.makedirs(path):递归地创建多个新目录。
-
os.remove(path):删除指定的文件。
-
os.rmdir(path):删除指定的目录。
-
os.path.exists(path):判断指定路径是否存在。
-
os.path.isfile(path):判断指定路径是否是一个文件。
-
os.path.isdir(path):判断指定路径是否是一个目录。
-
os.path.join(path1, path2, ...):将多个路径组合成一个路径。
-
os.path.basename(path):返回路径中的文件名部分。
-
os.path.dirname(path):返回路径中的目录部分。
-
os.path.splitext(path):将路径分割成目录部分和扩展名部分。
示例:
# 使用os模块创建一个新文件夹,并将文件从一个文件夹移动到另一个文件夹
import os
# 创建一个新文件夹
os.mkdir('new_folder')
# 移动文件
src = 'old_folder/file.txt'
dst = 'new_folder/file.txt'
os.rename(src, dst)
2.2 shutil
shutil模块是Python的标准库之一,提供了更高级别的文件操作功能。它是os模块的补充,提供了一些更方便的函数来复制、移动、删除文件以及文件夹。
一些常用的shutil模块函数包括:
-
shutil.copy(src, dst):将文件从src复制到dst。
-
shutil.move(src, dst):将文件或文件夹从src移动到dst。
-
shutil.rmtree(path):递归地删除指定路径下的所有文件和文件夹。
-
shutil.make_archive(base_name, format, root_dir):创建一个压缩文件。
-
shutil.unpack_archive(filename, extract_dir):解压缩文件。
使用shutil模块复制一个文件,并删除一个文件夹
import shutil
复制文件
src = 'old_folder/file.txt'
dst = 'new_folder/file.txt'
shutil.copy(src, dst)删除文件夹
shutil.rmtree('old_folder')
三、文件通配符
Python的glob模块提供了一种方便的方法来查找符合特定模式的文件路径。使用glob模块可以使用通配符匹配文件名,例如查找所有以.txt结尾的文件或者所有以特定前缀开头的文件。
使用glob模块可以实现以下功能:
-
查找符合特定规则的文件名:可以使用通配符(如
*
、?
)来匹配文件名,以便查找符合特定模式的文件。例如,可以使用*.txt
来查找当前目录下所有的txt文件。 -
遍历文件夹:可以使用通配符模式来遍历文件夹中的文件和子文件夹。可以使用
*来配任意字符,使用
**`来匹配任意路径。
下面是一些常用的glob模块函数和用法:
-
glob.glob(path)
:返回一个包含符合指定规则的文件路径名的列表。path
参数是一个字符串,可以包含通配符模式。例如,glob.glob('*.txt')
将返回当前目录下所有的txt文件路径名的列表。 -
glob.iglob(path)
:返回一个生成器,用于遍历符合指定规则的文件路径名。与glob.glob()
不同的是,glob.iglob()
是惰性生成器,逐个返回匹配的文件路径名,而不是一次性返回所有匹配的文件路径名。 -
glob.escape(path)
:返回一个转义后的字符串,用于将特殊字符转义为普通字符。这在使用通配符模式时特别有用,可以确保特殊字符被视为普通字符而不是通配符。
示例:
使用glob模块来查找当前目录下所有的txt文件
import glob
txt_files = glob.glob('*.txt')
for file_path in txt_files:
print(file_path)
三、字符串模式匹配
re模块是Python的正则表达式模块,提供了一种强大的方法来进行字符串模式匹配和搜索。通过使用正则表达式,可以查找、替换、分割和提取字符串中的特定模式。
下面是re模块的一些常用函数和方法:
-
re.match(pattern, string, flags=0): 从字符串的起始位置开始匹配模式,如果匹配成功则返回一个匹配对象,否则返回None。
-
re.search(pattern, string, flags=0): 在字符串中搜索匹配模式的第一个位置,如果匹配成功则返回一个匹配对象,否则返回None。
-
re.findall(pattern, string, flags=0): 在字符串中找到匹配模式的所有子串,并以列表的形式返回。
-
re.finditer(pattern, string, flags=0): 在字符串中找到匹配模式的所有子串,并以迭代器的形式返回。
-
re.sub(pattern, repl, string, count=0, flags=0): 在字符串中找到匹配模式的子串,并用 repl 替换。如果 count 指定,则最多替换 count 次。
-
re.split(pattern, string, maxsplit=0, flags=0): 根据模式的匹配项将字符串拆分为列表。
-
re.compile(pattern, flags=0): 将正则表达式的字符串形式编译为正则表达式对象,可以提高匹配的效率。
-
匹配对象的方法:group()返回匹配的字符串,start()返回匹配的起始位置,end()返回匹配的结束位置,span()返回一个元组,包含匹配的起始和结束位置。
四、数据库连接
Python的标准库中提供了多个用于数据库连接和操作的模块,如sqlite3、MySQLdb、psycopg2等。这些模块可以用于连接和操作多种类型的数据库,并执行查询、插入、更新和删除操作。
4.1 sqlite3
是Python标准库中的一个模块,用于操作SQLite数据库。SQLite是一种轻量级的嵌入式数据库,不需要独立的服务器进程,可以直接访问数据库文件。sqlite3模块提供了一系列函数和方法来连接、查询和操作SQLite数据库。
import sqlite3
# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
# 创建一个游标对象
cursor = conn.cursor()
# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS users
(id INT PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
age INT NOT NULL);''')
# 插入数据
cursor.execute("INSERT INTO users VALUES (1, 'Alice', 25)")
cursor.execute("INSERT INTO users VALUES (2, 'Bob', 30)")
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 提交事务并关闭连接
conn.commit()
conn.close()
4.2 MySQLdb
是一个第三方模块,用于操作MySQL数据库。MySQLdb模块是Python对MySQL数据库的接口,可以通过该模块连接MySQL数据库服务器,并执行SQL语句进行数据的增删改查操作。
import MySQLdb
# 连接到MySQL数据库
conn = MySQLdb.connect(host='localhost',
user='root',
password='password',
db='test')
# 创建一个游标对象
cursor = conn.cursor()
# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS users
(id INT PRIMARY KEY NOT NULL,
name VARCHAR(20) NOT NULL,
age INT NOT NULL);''')
# 插入数据
cursor.execute("INSERT INTO users VALUES (1, 'Alice', 25)")
cursor.execute("INSERT INTO users VALUES (2, 'Bob', 30)")
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 提交事务并关闭连接
conn.commit()
conn.close()
4.3 psycopg2
是一个第三方模块,用于操作PostgreSQL数据库。PostgreSQL是一种开源的关系型数据库管理系统,而psycopg2模块是Python对PostgreSQL数据库的接口,可以通过该模块连接PostgreSQL数据库服务器,并执行SQL语句进行数据的增删改查操作。
import psycopg2
# 连接到PostgreSQL数据库
conn = psycopg2.connect(host='localhost',
user='postgres',
password='password',
dbname='test')
# 创建一个游标对象
cursor = conn.cursor()
# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS users
(id INT PRIMARY KEY NOT NULL,
name VARCHAR(20) NOT NULL,
age INT NOT NULL);''')
# 插入数据
cursor.execute("INSERT INTO users VALUES (1, 'Alice', 25)")
cursor.execute("INSERT INTO users VALUES (2, 'Bob', 30)")
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 提交事务并关闭连接
conn.commit()
conn.close()
五、网络通讯
5.1 urllib.request
urllib.request
模块是Python标准库中用于进行HTTP请求的模块。它提供了一种更简单和高级的方式来发送HTTP请求,处理响应以及处理URL。
urllib.request
模块中的主要函数和类包括:
-
urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None): 打开一个URL并返回一个类似文件的对象。可以使用该对象来读取URL的内容。
-
Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None): 创建一个HTTP请求对象。可以设置请求的URL、数据、头部信息等。
-
urlretrieve(url, filename=None, reporthook=None, data=None): 下载一个URL的内容,并将其保存到本地文件中。
-
build_opener(*handlers): 创建一个自定义的URL打开器,可以用于处理特定的URL请求。
-
ProxyHandler(proxies=None): 创建一个处理代理服务器的处理器。
使用urllib.request
模块进行HTTP请求的基本步骤如下:
- 导入
urllib.request
模块。 - 使用
urlopen()
函数打开一个URL,或者创建一个Request
对象。 - 可以通过读取返回的类文件对象来获取URL的内容。
- 可以使用
urlretrieve()
函数将URL的内容保存到本地文件中。
以下是一个简单的示例代码,演示如何使用
import urllib.request
# 打开一个URL并读取内容
response = urllib.request.urlopen('http://www.example.com')
html = response.read()
print(html)
# 下载一个URL的内容并保存到本地文件
urllib.request.urlretrieve('http://www.example.com', 'example.html')
5.2 socket模块
Python的socket模块提供了一种在网络上进行通信的方式。使用socket模块,可以创建网络套接字并通过网络发送和接收数据。此外,Python的标准库还提供了其他一些模块,如http.client、urllib等,用于处理HTTP请求和访问Web资源。
以下是socket模块的一些常用函数和方法:
-
socket():创建一个socket对象,用于进行网络通信。可以指定协议类型、套接字类型等参数。
-
bind():绑定一个地址(主机名和端口号)到socket对象上。
-
listen():开始监听连接请求,使socket对象成为一个服务器端套接字。
-
accept():接受一个客户端连接请求,并返回一个新的socket对象,用于与客户端进行通信。
-
connect():与服务器端建立连接,使socket对象成为一个客户端套接字。
-
send():发送数据到连接的另一端。
-
recv():接收连接的另一端发送的数据。
-
close():关闭socket连接。
-
setsockopt():设置socket的选项。
示例:
使用socket模块请求web资源:
import socket
def request_web_resource(host, port, path):
# 创建一个TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立与服务器的连接
client_socket.connect((host, port))
# 构造HTTP请求
request = f"GET {path} HTTP/1.1\r\nHost: {host}\r\n\r\n"
# 发送HTTP请求
client_socket.sendall(request.encode())
# 接收服务器的响应
response = b""
while True:
data = client_socket.recv(4096)
if not data:
break
response += data
# 关闭连接
client_socket.close()
# 打印服务器的响应
print(response.decode())
# 调用函数请求web资源
request_web_resource("www.example.com", 80, "/index.html")
六、数学运算
Python的标准库中提供了一些用于数学运算的模块,如math、random等。math模块提供了一些常用的数学函数,如三角函数、指数函数、对数函数等。random模块可以生成随机数,进行随机选择和洗牌操作。
6.1 math
math库提供了丰富的数学运算函数,例如常见的对数、三角函数等。(详情点击连接可看)
示例:
import math
math.cos(math.pi / 4)# 输出:0.70710678118654757
math.log(1024,2)# 输出:10
6.2 Random
Random库提供了生成随机数的函数。(函数很多,详见请点击链接)
通常使用的函数包含以下几种:
-
random.random()
: 返回一个0到1之间的随机浮点数。 -
random.randint(a, b)
: 返回一个在指定范围内的随机整数,包括a和b。 -
random.choice(seq)
: 从给定的序列中随机选择一个元素。 -
random.shuffle(seq)
: 将给定序列中的元素随机排序。 -
random.sample(population, k)
: 从给定的总体中随机选择k个不重复的元素。 -
random.uniform(a, b)
: 返回一个在指定范围内的随机浮点数,包括a和b。 -
random.seed(a=None)
: 初始化随机数生成器的种子。
展示了如何使用random
模块的一些常用函数:
import random
# 生成一个0到1之间的随机浮点数
print(random.random())
# 生成一个在指定范围内的随机整数
print(random.randint(1, 10))
# 从给定的序列中随机选择一个元素
colors = ['red', 'blue', 'green']
print(random.choice(colors))
# 将给定序列中的元素随机排序
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)
# 从给定的总体中随机选择k个不重复的元素
population = ['apple', 'banana', 'orange', 'grape', 'watermelon']
sample = random.sample(population, 3)
print(sample)
# 生成一个在指定范围内的随机浮点数
print(random.uniform(0.5, 1.5))
# 初始化随机数生成器的种子
random.seed(123)
print(random.random())
6.3 statistics
statistics库常用于数理统计,可以计算数据的基本属性(基本统计属性(均值,中位数,方差等)。
以下是一些常用的statistics
模块函数:
-
mean(data)
: 计算数据的算术平均值。 -
median(data)
: 计算数据的中位数。 -
mode(data)
: 计算数据的众数。 -
stdev(data)
: 计算数据的标准差。 -
variance(data)
: 计算数据的方差。 -
harmonic_mean(data)
: 计算数据的调和平均值。 -
median_low(data)
: 计算数据的低中位数。 -
median_high(data)
: 计算数据的高中位数。 -
median_grouped(data, interval=1)
: 计算数据的分组中位数。
示例:
import statistics
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 计算数据的算术平均值
print(statistics.mean(data))
# 计算数据的中位数
print(statistics.median(data))
# 计算数据的众数
print(statistics.mode(data))
# 计算数据的标准差
print(statistics.stdev(data))
# 计算数据的方差
print(statistics.variance(data))
# 计算数据的调和平均值
print(statistics.harmonic_mean(data))
# 计算数据的低中位数
print(statistics.median_low(data))
# 计算数据的高中位数
print(statistics.median_high(data))
# 计算数据的分组中位数
print(statistics.median_grouped(data, interval=2))
七、日期和时间
Python的datetime模块提供了处理日期和时间的功能。可以使用datetime模块来创建日期和时间对象,并进行日期和时间的计算、格式化和解析。
以下是一些常用的datetime
模块的类和函数:
-
datetime.datetime
: 表示一个具体的日期和时间,包括年、月、日、时、分、秒和微秒。 -
datetime.date
: 表示一个具体的日期,包括年、月、日。 -
datetime.time
: 表示一个具体的时间,包括时、分、秒和微秒。 -
datetime.timedelta
: 表示两个日期或时间之间的差值,可以用于日期和时间的加减运算。 -
datetime.now()
: 返回当前的日期和时间。 -
datetime.today()
: 返回当前的日期。 -
datetime.strptime(date_string, format)
: 将一个字符串解析为日期或时间对象,需要指定解析格式。 -
datetime.strftime(format)
: 将一个日期或时间对象格式化为字符串,需要指定格式化格式。
示例:
import datetime
# 获取当前的日期和时间
now = datetime.datetime.now()
print(now)
# 获取当前的日期
today = datetime.datetime.today().date()
print(today)
# 创建一个指定日期和时间的datetime对象
dt = datetime.datetime(2023, 9, 19, 14, 30, 0)
print(dt)
# 计算两个日期之间的差值
delta = datetime.timedelta(days=7)
new_date = today + delta
print(new_date)
# 将字符串解析为日期对象
date_string = "2023-09-19"
date = datetime.datetime.strptime(date_string, "%Y-%m-%d")
print(date)
# 将日期对象格式化为字符串
formatted_date = date.strftime("%Y-%m-%d")
print(formatted_date)
八、数据压缩
Python的标准库中提供了一些用于数据压缩和解压缩的模块,如gzip、zipfile等。这些模块可以用于创建和解压缩压缩文件,如gzip压缩文件、ZIP压缩文件等。
1.gzip模块:gzip模块提供了gzip文件的压缩和解压缩功能。可以使用gzip模块中的GzipFile类来创建gzip文件对象,然后使用write()方法来写入压缩数据,最后使用close()方法关闭文件。
import bz2
# 压缩文件
with open('file.txt', 'rb') as f_in:
with bz2.open('file.txt.bz2', 'wb') as f_out:
f_out.write(f_in.read())
# 解压文件
with bz2.open('file.txt.bz2', 'rb') as f_in:
with open('file.txt', 'wb') as f_out:
f_out.write(f_in.read())
2.zipfile是Python标准库中用于处理ZIP文件的模块。它提供了一种简单的方式来创建、读取和修改ZIP文件。
import zipfile
# 创建zip文件
with zipfile.ZipFile('example.zip', 'w') as zf:
zf.write('file1.txt')
zf.write('file2.txt')
#解压zip文件
with zipfile.ZipFile('example.zip', 'r') as zf:
zf.extractall('extracted_files')
#读取zip文件
with zipfile.ZipFile('example.zip', 'r') as zf:
file_list = zf.namelist()
file_info = zf.getinfo('file1.txt')
with zf.open('file1.txt') as f:
content = f.read()
#修改zip文件
with zipfile.ZipFile('example.zip', 'a') as zf:
zf.write('file3.txt')
zf.extract('file1.txt', 'extracted_files')
zf.remove('file2.txt')
九、性能测量
Python的标准库中提供了一些用于性能测量和优化的模块,如timeit、profile等。timeit模块用于测量代码的执行时间,profile模块用于分析代码的性能瓶颈。这些模块可以帮助开发者找到代码中的性能问题,并进行优化。
Python标准库中的性能测试相关模块:
-
timeit模块:timeit模块提供了一个简单的接口来测量小段代码的执行时间。可以使用它来比较不同实现方式的性能差异。
-
cProfile模块:cProfile模块提供了一个分析器,用于确定代码中的瓶颈所在。它可以生成一个详细的性能分析报告,帮助开发者找出性能问题所在。
-
profile模块:profile模块是cProfile模块的一个简化版本,它提供了一个简单的性能分析工具。
-
hotshot模块:hotshot模块是一个高性能的分析器,可以用于测量代码的执行时间和函数调用次数。
-
sys模块:sys模块提供了一些与Python解释器和系统相关的功能。其中包括sys.getsizeof()函数,可以用来测量对象的内存使用情况。
十、质量控制
Python标准库中的质量控制模块为"unittest",它提供了一种用于编写和运行测试的框架。
unittest模块基于xUnit测试框架的设计思想,提供了一组用于编写测试用例和进行断言的类和方法。通过使用unittest模块,开发者可以轻松地进行单元测试和集成测试,以确保代码的质量。
以下是unittest模块的一些关键概念和功能:
-
测试用例(Test Case):单个测试单元,通常是一个函数或方法,用于验证代码的特定行为。
-
测试套件(Test Suite):一组测试用例的集合,可以一次运行多个测试用例。
-
断言(Assertion):用于验证代码输出是否符合预期的语句。unittest模块提供了多种断言方法,如assertEqual()、assertTrue()、assertFalse()等。
-
测试运行器(Test Runner):用于运行测试套件中的测试用例,并生成测试结果报告。unittest模块提供了多种测试运行器,如TextTestRunner、HTMLTestRunner等。
-
测试装置(Test Fixture):用于准备测试环境和清理测试环境的方法。例如,setUp()方法用于在执行每个测试用例之前设置测试环境,tearDown()方法用于在执行每个测试用例之后清理测试环境。
使用unittest模块编写测试用例的一般步骤如下:
-
导入unittest模块和要测试的模块。
-
创建一个测试类,继承unittest.TestCase。
-
在测试类中定义测试方法,方法名以"test_"开头。
-
在每个测试方法中,编写测试逻辑,并使用断言方法验证代码输出是否符合预期。
-
使用unittest的测试运行器运行测试用例。