一、知识衔接:构建编程思维体系
前三篇核心能力:
✅ 基础语法 ✅ 数据结构 ✅ 文件操作 ✅ 字符串处理
本篇新维度:
graph LR
A[前篇技能] --> B[模块化思维]
B --> C[时间处理]
B --> D[路径管理]
B --> E[数据序列化]
二、模块化编程:像搭积木一样写代码
1. 模块是什么?(生活化比喻)
-
现实比喻:像手机里的APP,每个APP专注解决特定问题
-
代码定义:把相关功能封装成
.py
文件,通过import
调用
# 使用math模块计算
import math
print("16的平方根:", math.sqrt(16)) # 输出4.0
# 给模块起别名
import datetime as dt
print("当前年份:", dt.datetime.now().year)
2. 自定义模块实战(手把手教学)
步骤1:创建diary_utils.py
文件
# 日记工具模块
def get_current_time():
"""获取当前时间"""
import datetime
return datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
def format_diary(content):
"""给日记内容添加分隔线"""
return f"\n{'='*20}\n{content}\n{'='*20}"
步骤2:在主程序中使用
import diary_utils as du
time = du.get_current_time()
content = du.format_diary("今天学会了模块化编程!")
print(f"{time}{content}")
三、时间处理:让程序记住时间(datetime精讲)
1. 基础时间操作
from datetime import datetime
# 获取当前时间
now = datetime.now()
print(f"现在是:{now.year}年{now.month}月{now.day}日 {now.hour}点")
# 计算三天后的时间
future = now + datetime.timedelta(days=3)
print("三天后是:", future.strftime("%m/%d"))
2. 时间格式化对照表
格式代码 | 说明 | 示例 |
---|---|---|
%Y | 四位年份 | 2024 |
%m | 两位月份 | 03 |
%d | 两位日期 | 15 |
%H | 24小时制小时 | 14 |
%M | 分钟 | 05 |
四、路径管理:智能处理文件位置(os模块实战)
1. 常用文件操作
import os
# 检查文件是否存在
if os.path.exists("diary.txt"):
print("日记文件已存在")
else:
print("即将创建新日记本")
# 创建存档文件夹
os.makedirs("diary_archive", exist_ok=True)
2. 文件批量重命名(自动化案例)
# 将所有.txt文件添加日期后缀
for filename in os.listdir():
if filename.endswith(".txt"):
new_name = f"{filename[:-4]}_{datetime.now().strftime('%Y%m%d')}.txt"
os.rename(filename, new_name)
五、综合实战:智能日记本升级版
import os
import datetime
from diary_utils import format_diary # 导入自定义模块
DIARY_DIR = "diary_archive"
def write_diary():
content = input("请输入今日日记:")
today = datetime.date.today()
# 按月份创建文件夹
month_dir = os.path.join(DIARY_DIR, f"{today.year}-{today.month:02d}")
os.makedirs(month_dir, exist_ok=True)
# 保存到日期文件
file_path = os.path.join(month_dir, f"{today.day:02d}.txt")
with open(file_path, "w", encoding="utf-8") as f:
f.write(format_diary(content))
print("日记已存档!")
def search_diary():
keyword = input("输入搜索关键词:")
for root, dirs, files in os.walk(DIARY_DIR):
for file in files:
path = os.path.join(root, file)
with open(path, "r") as f:
if keyword in f.read():
print(f"找到相关日记:{path}")
# 主程序(沿用第三篇的交互逻辑)
# ...(此处省略重复的菜单代码,可访问评论区获取完整源码)
六、避坑指南
-
循环导入问题
-
错误场景:A模块导入B模块,B模块又导入A模块
-
解决方案:重构代码结构,提取公共部分到第三方模块
-
-
路径找不到的终极方案
# 获取当前脚本的绝对路径
current_path = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(current_path, "data.txt")
学习路线建议
-
今日任务
-
尝试将之前写的代码拆分成模块
-
用datetime记录自己每天的学习时长
-
-
模块化思维训练
# 把以下功能拆分成模块:
# 1. 文件操作工具(创建/删除文件)
# 2. 数学计算工具(加减乘除)
# 3. 字符串处理工具(加密/解密)
📢 下期预告:面向对象编程入门(用类重构日记本程序)
💡 小预告:下篇将实现多用户日记系统,添加登录验证功能!