主题
Python 常用的内置模块
更新: 9/24/2025字数: 0 字 时长: 0 分钟
Python 提供了丰富的内置模块,无需安装即可直接使用。
1. 文件和目录操作
os - 操作系统接口
python
import os
# 文件和目录操作
print(os.getcwd()) # 获取当前工作目录
os.chdir('/path/to/dir') # 改变当前目录
os.listdir('.') # 列出目录内容
# 路径操作
os.path.join('dir', 'file.txt') # 连接路径
os.path.exists('file.txt') # 检查路径是否存在
os.path.isdir('dirname') # 检查是否为目录
os.path.isfile('filename') # 检查是否为文件
os.path.getsize('file.txt') # 获取文件大小
# 系统操作
os.environ['PATH'] # 环境变量
os.system('ls -l') # 执行系统命令pathlib - 面向对象的路径操作(Python 3.4+)
python
from pathlib import Path
# 创建路径对象
p = Path('/home/user/documents')
p = Path.cwd() / 'file.txt' # 路径拼接
# 常用操作
p.exists() # 检查是否存在
p.is_file() # 是否为文件
p.name # 文件名
p.parent # 父目录
p.suffix # 文件扩展名
# 文件操作
p.read_text() # 读取文本
p.write_text('content') # 写入文本2. 系统相关
sys - 系统相关参数和函数
python
import sys
# 命令行参数
print(sys.argv) # 命令行参数列表
# Python 解释器信息
print(sys.version) # Python 版本
print(sys.platform) # 操作系统平台
print(sys.path) # 模块搜索路径
# 标准输入输出
sys.stdout.write('Hello\n') # 标准输出
sys.stderr.write('Error\n') # 标准错误
# 退出程序
sys.exit(0) # 退出程序3. 日期和时间
datetime - 日期和时间处理
python
from datetime import datetime, date, time, timedelta
# 当前时间
now = datetime.now()
print(now) # 2024-01-15 10:30:45.123456
# 日期时间创建
dt = datetime(2024, 1, 15, 10, 30, 0)
d = date(2024, 1, 15)
t = time(10, 30, 0)
# 格式化
print(now.strftime('%Y-%m-%d %H:%M:%S')) # 2024-01-15 10:30:45
print(now.strftime('%A, %B %d')) # Monday, January 15
# 时间计算
tomorrow = now + timedelta(days=1)
last_week = now - timedelta(weeks=1)
# 时间解析
dt = datetime.strptime('2024-01-15', '%Y-%m-%d')time - 时间访问和转换
python
import time
# 时间戳
print(time.time()) # 当前时间戳(秒)
# 休眠
time.sleep(2) # 休眠2秒
# 结构化时间
local_time = time.localtime()
print(time.strftime('%Y-%m-%d', local_time))
# 性能计时
start = time.perf_counter()
# 执行一些操作
end = time.perf_counter()
print(f'耗时: {end - start:.2f}秒')4. 数学运算
math - 数学函数
python
import math
# 基本数学函数
print(math.sqrt(16)) # 平方根: 4.0
print(math.pow(2, 3)) # 幂运算: 8.0
print(math.log(100, 10)) # 对数: 2.0
# 三角函数
print(math.sin(math.pi/2)) # 正弦: 1.0
print(math.degrees(math.pi)) # 弧度转角度: 180.0
# 常数
print(math.pi) # π: 3.141592653589793
print(math.e) # 自然常数: 2.718281828459045
# 取整函数
print(math.ceil(4.2)) # 向上取整: 5
print(math.floor(4.8)) # 向下取整: 4random - 生成随机数
python
import random
# 随机数
print(random.random()) # [0.0, 1.0) 的随机浮点数
print(random.randint(1, 10)) # [1, 10] 的随机整数
# 序列操作
items = [1, 2, 3, 4, 5]
random.shuffle(items) # 打乱序列
print(random.choice(items)) # 随机选择一个元素
print(random.sample(items, 3)) # 随机选择多个不重复元素
# 随机种子(用于重现结果)
random.seed(42) # 设置随机种子5. 数据序列化
json - JSON 编码和解码
python
import json
# Python 对象转 JSON 字符串
data = {
'name': '张三',
'age': 25,
'scores': [90, 85, 95]
}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)
# JSON 字符串转 Python 对象
parsed_data = json.loads(json_str)
print(parsed_data['name'])
# 文件操作
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)pickle - Python 对象序列化
python
import pickle
data = {'name': '李四', 'age': 30}
# 序列化到文件
with open('data.pkl', 'wb') as f:
pickle.dump(data, f)
# 从文件反序列化
with open('data.pkl', 'rb') as f:
loaded_data = pickle.load(f)6. 数据压缩和归档
zipfile - ZIP 归档处理
python
import zipfile
# 创建 ZIP 文件
with zipfile.ZipFile('archive.zip', 'w') as zf:
zf.write('file1.txt')
zf.write('file2.txt')
# 读取 ZIP 文件
with zipfile.ZipFile('archive.zip', 'r') as zf:
print(zf.namelist()) # 列出所有文件
zf.extractall('extracted') # 解压所有文件7. 网络和互联网
urllib - URL 处理
python
from urllib import request, parse
# 发送 HTTP 请求
response = request.urlopen('https://httpbin.org/json')
data = response.read().decode('utf-8')
print(data)
# URL 编码解码
params = {'q': 'python 教程', 'page': 1}
encoded = parse.urlencode(params)
print(encoded) # q=python+%E6%95%99%E7%A8%8B&page=18. 数据类型和集合
collections - 容器数据类型
python
from collections import Counter, defaultdict, deque, namedtuple
# Counter - 计数器
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
word_count = Counter(words)
print(word_count.most_common(2)) # [('apple', 3), ('banana', 2)]
# defaultdict - 带默认值的字典
dd = defaultdict(list)
dd['fruits'].append('apple')
dd['fruits'].append('banana')
print(dd['fruits']) # ['apple', 'banana']
# deque - 双端队列
dq = deque([1, 2, 3])
dq.appendleft(0) # 左侧添加
dq.append(4) # 右侧添加
print(dq) # deque([0, 1, 2, 3, 4])
# namedtuple - 命名元组
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y) # 10 20itertools - 迭代器工具
python
import itertools
# 无限迭代器
counter = itertools.count(start=1, step=2) # 1, 3, 5, 7...
# 组合迭代器
# 排列
perms = itertools.permutations('ABC', 2) # AB, AC, BA, BC, CA, CB
# 组合
combs = itertools.combinations('ABC', 2) # AB, AC, BC
# 分组
data = [1, 1, 2, 2, 3, 3]
groups = itertools.groupby(data) # 分组相邻重复元素9. 正则表达式
re - 正则表达式
python
import re
# 匹配
text = '我的电话是: 138-1234-5678'
pattern = r'\d{3}-\d{4}-\d{4}'
match = re.search(pattern, text)
if match:
print('找到电话:', match.group()) # 138-1234-5678
# 查找所有
emails = 'a@test.com, b@example.com'
email_pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
emails_found = re.findall(email_pattern, emails)
# 替换
text = 'Python is great, I love Python'
new_text = re.sub(r'Python', 'JavaScript', text)
print(new_text) # JavaScript is great, I love JavaScript10. 调试和测试
logging - 日志记录
python
import logging
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='app.log'
)
# 记录日志
logging.debug('调试信息')
logging.info('一般信息')
logging.warning('警告信息')
logging.error('错误信息')
logging.critical('严重错误')pdb - Python 调试器
python
import pdb
def problematic_function(x, y):
pdb.set_trace() # 设置断点
result = x / y
return result
# 常用 pdb 命令:
# n - 执行下一行
# c - 继续执行
# q - 退出调试
# p variable - 打印变量值实用示例项目
文件管理器工具
python
import os
import shutil
from pathlib import Path
from datetime import datetime
class FileManager:
def __init__(self, base_path='.'):
self.base_path = Path(base_path)
def list_files(self, pattern='*'):
"""列出文件"""
files = list(self.base_path.glob(pattern))
for file in files:
size = file.stat().st_size
mtime = datetime.fromtimestamp(file.stat().st_mtime)
print(f'{file.name:20} {size:10} {mtime:%Y-%m-%d %H:%M}')
def backup_files(self, pattern='*.txt', backup_dir='backup'):
"""备份文件"""
backup_path = self.base_path / backup_dir
backup_path.mkdir(exist_ok=True)
for file in self.base_path.glob(pattern):
shutil.copy2(file, backup_path / file.name)
print(f'备份: {file.name}')
def find_large_files(self, size_mb=10):
"""查找大文件"""
size_limit = size_mb * 1024 * 1024
for file in self.base_path.rglob('*'):
if file.is_file() and file.stat().st_size > size_limit:
size_mb = file.stat().st_size / (1024 * 1024)
print(f'{file.name} - {size_mb:.1f} MB')
# 使用示例
if __name__ == '__main__':
fm = FileManager()
fm.list_files('*.py')
fm.find_large_files(5)总结表:最常用的内置模块
| 模块 | 主要用途 | 使用频率 |
|---|---|---|
os | 操作系统接口 | ⭐⭐⭐⭐⭐ |
sys | 系统参数和函数 | ⭐⭐⭐⭐ |
datetime | 日期时间处理 | ⭐⭐⭐⭐⭐ |
json | JSON 数据处理 | ⭐⭐⭐⭐⭐ |
pathlib | 面向对象路径操作 | ⭐⭐⭐⭐ |
collections | 扩展容器类型 | ⭐⭐⭐⭐ |
re | 正则表达式 | ⭐⭐⭐ |
math | 数学运算 | ⭐⭐⭐ |
random | 随机数生成 | ⭐⭐⭐ |
itertools | 迭代器工具 | ⭐⭐ |