“自带电池”指python语言的标准库,因为它包含了丰富的功能和工具,几乎可以满足大部分的开发需求,就像一个内置电池一样,所以python标准库被称之为“自带电池”。
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)
shutil模块是Python的标准库之一,提供了更高级别的文件操作功能。它是os模块的补充,提供了一些更方便的函数来复制、移动、删除文件以及文件夹。
一些常用的shutil模块函数包括:
- # 使用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等。这些模块可以用于连接和操作多种类型的数据库,并执行查询、插入、更新和删除操作。
是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()
是一个第三方模块,用于操作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()
是一个第三方模块,用于操作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()
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
对象。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')
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模块可以生成随机数,进行随机选择和洗牌操作。
math库提供了丰富的数学运算函数,例如常见的对数、三角函数等。(详情点击连接可看)
示例:
- import math
-
- math.cos(math.pi / 4)# 输出:0.70710678118654757
- math.log(1024,2)# 输出:10
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())
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的测试运行器运行测试用例。