
Python内置的常用模块提供了文件操作、数据处理、网络通信、日志记录等基础功能,无需安装即可直接使用。以下是30个最实用的基础模块及其使用方法。
场景类别 | 推荐模块 |
|---|---|
文件操作 | os, pathlib, shutil, glob |
数据处理 | json, csv, pickle, collections |
网络编程 | socket, urllib |
系统工具 | argparse, logging, subprocess |
数学计算 | math, statistics, random |
文本处理 | re, string |
日期时间 | datetime, time |
数据持久化 | sqlite3, configparser |
import os
# 获取当前工作目录
current_dir = os.getcwd()
print(f"当前目录: {current_dir}")
# 检查文件是否存在
if os.path.exists("example.txt"):
print("文件存在")
# 遍历目录
for item in os.scandir('.'):
print(f"{item.name} - 目录" if item.is_dir() else f"{item.name} - 文件")import sys
# 获取Python版本信息
print(f"Python版本: {sys.version}")
# 查看模块搜索路径
print("模块搜索路径:")
for path in sys.path:
print(f" {path}")
# 程序退出
if len(sys.argv) < 2:
print("缺少参数")
sys.exit(1)import platform
print(f"操作系统: {platform.system()}")
print(f"系统版本: {platform.release()}")
print(f"处理器架构: {platform.architecture()[0]}")import json
# 复杂数据序列化
data = {
"users": [
{"name": "张三", "age": 25, "hobbies": ["阅读", "编程"]},
{"name": "李四", "age": 30, "hobbies": ["音乐", "旅行"]}
]
}
# 美化输出
json_str = json.dumps(data, indent=2, ensure_ascii=False)
print(json_str)
# 从文件读取JSON
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)import csv
# 写入CSV文件
headers = ['姓名', '年龄', '城市']
rows = [
['王五', 28, '北京'],
['赵六', 35, '上海'],
['孙七', 22, '广州']
]
with open('users.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(headers)
writer.writerows(rows)
# 使用DictReader读取
with open('users.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(f"{row['姓名']} - {row['年龄']}岁")from collections import defaultdict, deque, namedtuple
# 命名元组
Person = namedtuple('Person', ['name', 'age', 'city'])
p1 = Person('张三', 25, '北京')
print(f"{p1.name} 来自 {p1.city}")
# 双端队列
dq = deque([1, 2, 3])
dq.appendleft(0) # 左侧添加
dq.append(4) # 右侧添加
print(list(dq)) # [0, 1, 2, 3, 4]
# 带默认值的字典
word_count = defaultdict(int)
text = "hello world hello python world"
for word in text.split():
word_count[word] += 1
print(dict(word_count))from datetime import datetime, date, timedelta
# 当前日期时间
now = datetime.now()
print(f"当前时间: {now}")
# 日期计算
today = date.today()
next_week = today + timedelta(days=7)
print(f"今天: {today}, 一周后: {next_week}")
# 格式化输出
formatted = now.strftime("%Y年%m月%d日 %H时%M分%S秒")
print(formatted)import time
# 性能测试装饰器
def timer(func):
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
print(f"{func.__name__} 执行时间: {end-start:.4f}秒")
return result
return wrapper
@timer
def slow_function():
time.sleep(1)
return "完成"
slow_function()import math
# 常用数学计算
print(f"π的值: {math.pi}")
print(f"e的值: {math.e}")
print(f"2的平方根: {math.sqrt(2):.4f}")
print(f"5的阶乘: {math.factorial(5)}")
# 对数计算
print(f"以10为底100的对数: {math.log10(100)}")import random
# 生成随机数据
random_numbers = [random.randint(1, 100) for _ in range(5)]
print(f"随机整数: {random_numbers}")
# 随机抽样
items = ['苹果', '香蕉', '橙子', '葡萄', '芒果']
sample = random.sample(items, 3)
print(f"随机样本: {sample}")
# 打乱顺序
random.shuffle(items)
print(f"打乱后: {items}")from urllib.request import urlopen, Request
from urllib.parse import urlencode, quote
# 发送HTTP请求
def fetch_url(url):
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
with urlopen(req) as response:
content = response.read().decode('utf-8')
return content[:200] # 返回前200字符
# URL编码
search_term = "Python编程"
encoded = quote(search_term)
print(f"编码后: {encoded}")import socket
# 创建TCP客户端
def tcp_client(host, port):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.settimeout(5)
try:
client.connect((host, port))
client.send(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
response = client.recv(1024)
return response.decode('utf-8')
except socket.timeout:
return "连接超时"
finally:
client.close()
# 获取主机信息
hostname = socket.gethostname()
print(f"主机名: {hostname}")import pickle
class User:
def __init__(self, name, email):
self.name = name
self.email = email
def __repr__(self):
return f"User(name='{self.name}', email='{self.email}')"
# 序列化对象
users = [
User('张三', 'zhang@example.com'),
User('李四', 'li@example.com')
]
with open('users.pkl', 'wb') as f:
pickle.dump(users, f)
# 反序列化
with open('users.pkl', 'rb') as f:
loaded_users = pickle.load(f)
print(loaded_users)import sqlite3
def create_database():
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
price REAL,
stock INTEGER
)
''')
# 插入数据
products = [
('笔记本电脑', 5999.99, 10),
('智能手机', 3999.50, 25),
('平板电脑', 2999.00, 15)
]
cursor.executemany('INSERT INTO products (name, price, stock) VALUES (?, ?, ?)', products)
conn.commit()
# 查询数据
cursor.execute('SELECT * FROM products WHERE price > 3000')
for row in cursor.fetchall():
print(f"产品: {row[1]}, 价格: {row[2]}")
conn.close()
create_database()import re
text = """
联系人信息:
张三: 138-1234-5678
李四: (021) 6234-5678
王五: +86 139 8765 4321
"""
# 提取手机号码
phone_pattern = r'(\d{3}[-\.\s]??\d{4}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4})'
phones = re.findall(phone_pattern, text)
print("找到的电话号码:", phones)
# 邮箱验证
def validate_email(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return bool(re.match(pattern, email))
print(validate_email("test@example.com")) # True
print(validate_email("invalid.email")) # Falseimport string
# 字符串常量
print(f"所有字母: {string.ascii_letters}")
print(f"数字: {string.digits}")
print(f"标点符号: {string.punctuation}")
# 模板字符串
template = string.Template('欢迎 $name 参加 $event 活动!')
message = template.substitute(name='张三', event='Python大会')
print(message)import argparse
def main():
parser = argparse.ArgumentParser(description='文件处理工具')
parser.add_argument('input_file', help='输入文件路径')
parser.add_argument('-o', '--output', help='输出文件路径')
parser.add_argument('-v', '--verbose', action='store_true', help='详细输出')
parser.add_argument('--count', type=int, default=1, help='处理次数')
args = parser.parse_args()
if args.verbose:
print(f"处理文件: {args.input_file}")
print(f"输出到: {args.output}")
print(f"处理次数: {args.count}")
if __name__ == "__main__":
main()import logging
# 配置日志系统
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('app.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger('my_app')
def process_data(data):
logger.info(f"开始处理数据,长度: {len(data)}")
try:
# 模拟数据处理
result = len(data) * 2
logger.debug(f"处理结果: {result}")
return result
except Exception as e:
logger.error(f"处理数据时出错: {e}")
raise
process_data("测试数据")import hashlib
def hash_file(filename):
"""计算文件的SHA256哈希值"""
hash_sha256 = hashlib.sha256()
with open(filename, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_sha256.update(chunk)
return hash_sha256.hexdigest()
def hash_password(password, salt=''):
"""密码哈希"""
return hashlib.pbkdf2_hmac('sha256', password.encode(), salt.encode(), 100000).hex()
print(f"密码哈希: {hash_password('mypassword', 'salt')}")import itertools
# 无限迭代器
counter = itertools.count(start=10, step=2)
print("计数器:", [next(counter) for _ in range(5)])
# 排列组合
letters = ['A', 'B', 'C']
combinations = list(itertools.combinations(letters, 2))
print("组合:", combinations)
# 分组操作
data = [1, 1, 2, 3, 3, 3, 4]
grouped = [(key, list(group)) for key, group in itertools.groupby(data)]
print("分组结果:", grouped)from functools import lru_cache, partial
@lru_cache(maxsize=100)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)from operator import itemgetter, attrgetter
data = [('张三', 25), ('李四', 30), ('王五', 20)]
sorted_data = sorted(data, key=itemgetter(1))import glob
py_files = glob.glob('*.py')
print("Python文件:", py_files)import shutil
# 复制文件树
shutil.copytree('source_dir', 'backup_dir')import tempfile
with tempfile.NamedTemporaryFile() as tmp:
tmp.write(b"临时数据")
print(f"临时文件: {tmp.name}")import zipfile
with zipfile.ZipFile('archive.zip', 'w') as zf:
zf.write('file1.txt')import configparser
config = configparser.ConfigParser()
config.read('config.ini')from pathlib import Path
path = Path('example.txt')
print(f"文件扩展名: {path.suffix}")import statistics
data = [1, 2, 3, 4, 5]
print(f"平均值: {statistics.mean(data)}")import weakref
class Data:
pass
obj = Data()
weak_obj = weakref.ref(obj)Python的基础模块构成了开发的核心工具箱,熟练掌握这些模块能够:
1、提高开发效率 -- 避免重复造轮子;
2、代码更规范 -- 使用标准库保证代码质量;
3、易于维护 -- 标准接口便于团队协作;
4、性能优化 -- 内置模块经过充分优化;
“无他,惟手熟尔”!有需要的用起来!
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!