本文目录导读:

我来帮你实现一个简易的日记本脚本,这里提供几个不同版本的实现方案:
纯命令行Python版(最基础)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""简易日记本 - 命令行版本"""
import os
import json
from datetime import datetime
class Diary:
def __init__(self, filename="diary.json"):
self.filename = filename
self.entries = self.load_entries()
def load_entries(self):
"""加载日记数据"""
if os.path.exists(self.filename):
try:
with open(self.filename, 'r', encoding='utf-8') as f:
return json.load(f)
except:
return {}
return {}
def save_entries(self):
"""保存日记数据"""
with open(self.filename, 'w', encoding='utf-8') as f:
json.dump(self.entries, f, ensure_ascii=False, indent=2)
def write_entry(self):
"""写日记"""
today = datetime.now().strftime("%Y-%m-%d")
print(f"\n📝 今天的日期:{today}")
if today in self.entries:
print("⚠️ 今天已经有日记,写入将覆盖旧内容!")
print("当前内容:")
print("-" * 40)
print(self.entries[today])
print("-" * 40)
print("请输入今天的日记(输入 @结束 完成写作):")
lines = []
while True:
line = input()
if line == "@结束":
break
lines.append(line)
content = "\n".join(lines)
if content.strip():
self.entries[today] = content
self.save_entries()
print("✅ 日记保存成功!")
else:
print("❌ 日记内容为空,未保存")
def view_entry(self):
"""查看指定日期的日记"""
print("\n📅 请输入要查看的日期(格式:2024-01-01)")
print("输入 '#39; 查看最近一篇,直接回车查看今天的:")
date = input("> ").strip()
if not date:
date = datetime.now().strftime("%Y-%m-%d")
elif date == "quot;:
if self.entries:
date = max(self.entries.keys())
else:
print("📭 还没有任何日记")
return
if date in self.entries:
print(f"\n📖 {date} 的日记:")
print("=" * 50)
print(self.entries[date])
print("=" * 50)
else:
print(f"❌ 没有找到 {date} 的日记")
def view_all(self):
"""查看所有日记"""
if not self.entries:
print("📭 还没有任何日记")
return
print("\n📚 所有日记:")
print("-" * 50)
for date in sorted(self.entries.keys(), reverse=True):
preview = self.entries[date][:50] + "..." if len(self.entries[date]) > 50 else self.entries[date]
print(f"📅 {date}: {preview}")
print("-" * 50)
def delete_entry(self):
"""删除指定日期的日记"""
print("\n🗑️ 请输入要删除的日期:")
date = input("> ").strip()
if date in self.entries:
print(f"\n确认删除 {date} 的日记?(y/n)")
if input().lower() == 'y':
del self.entries[date]
self.save_entries()
print("✅ 日记已删除")
else:
print(f"❌ 没有找到 {date} 的日记")
def search(self):
"""搜索日记内容"""
keyword = input("🔍 请输入搜索关键词:").strip()
if not keyword:
return
found = False
for date, content in self.entries.items():
if keyword in content:
print(f"\n📅 {date} 中找到:")
lines = content.split('\n')
for line in lines:
if keyword in line:
print(f" → {line}")
found = True
if not found:
print("🔍 没有找到匹配的内容")
def show_menu(self):
"""显示主菜单"""
print("\n" + "=" * 40)
print("📔 简易日记本")
print("=" * 40)
print("1. ✍️ 写今天的日记")
print("2. 📖 查看日记")
print("3. 📚 查看所有日记")
print("4. 🔍 搜索日记")
print("5. 🗑️ 删除日记")
print("6. ❌ 退出")
print("=" * 40)
def run(self):
"""运行主程序"""
while True:
self.show_menu()
choice = input("请选择操作 (1-6): ").strip()
if choice == "1":
self.write_entry()
elif choice == "2":
self.view_entry()
elif choice == "3":
self.view_all()
elif choice == "4":
self.search()
elif choice == "5":
self.delete_entry()
elif choice == "6":
print("\n👋 再见!")
break
else:
print("❌ 无效选择,请输入 1-6")
if __name__ == "__main__":
diary = Diary()
diary.run()
带GUI界面的版本(使用tkinter)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""简易日记本 - GUI版本"""
import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext
from datetime import datetime
import json
import os
class DiaryGUI:
def __init__(self, root):
self.root = root
self.root.title("📔 简易日记本")
self.root.geometry("800x600")
self.filename = "diary_gui.json"
self.entries = self.load_entries()
self.setup_ui()
self.refresh_entry_list()
def load_entries(self):
"""加载日记"""
if os.path.exists(self.filename):
try:
with open(self.filename, 'r', encoding='utf-8') as f:
return json.load(f)
except:
return {}
return {}
def save_entries(self):
"""保存日记"""
with open(self.filename, 'w', encoding='utf-8') as f:
json.dump(self.entries, f, ensure_ascii=False, indent=2)
def setup_ui(self):
"""设置界面"""
# 顶部菜单栏
menubar = tk.Menu(self.root)
self.root.config(menu=menubar)
file_menu = tk.Menu(menubar, tearoff=0)
file_menu.add_command(label="保存", command=self.save_current)
file_menu.add_command(label="新建", command=self.new_entry)
file_menu.add_separator()
file_menu.add_command(label="退出", command=self.root.quit)
menubar.add_cascade(label="文件", menu=file_menu)
# 主界面布局
main_frame = ttk.Frame(self.root, padding="10")
main_frame.pack(fill=tk.BOTH, expand=True)
# 左侧日期列表
left_frame = ttk.Frame(main_frame)
left_frame.pack(side=tk.LEFT, fill=tk.Y, padx=(0, 10))
ttk.Label(left_frame, text="📅 日记列表").pack(pady=(0, 5))
self.entry_list = tk.Listbox(left_frame, width=20, height=20)
self.entry_list.pack(side=tk.LEFT, fill=tk.Y)
scrollbar = ttk.Scrollbar(left_frame, orient="vertical", command=self.entry_list.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
self.entry_list.config(yscrollcommand=scrollbar.set)
self.entry_list.bind('<<ListboxSelect>>', self.on_select)
# 右侧编辑区
right_frame = ttk.Frame(main_frame)
right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)
# 日期显示
self.date_label = ttk.Label(right_frame, text=f"📅 {datetime.now().strftime('%Y-%m-%d')}")
self.date_label.pack(pady=(0, 5))
# 文本编辑区
self.text_editor = scrolledtext.ScrolledText(right_frame, wrap=tk.WORD, height=25)
self.text_editor.pack(fill=tk.BOTH, expand=True)
# 按钮区域
button_frame = ttk.Frame(right_frame)
button_frame.pack(pady=10)
ttk.Button(button_frame, text="💾 保存", command=self.save_current).pack(side=tk.LEFT, padx=5)
ttk.Button(button_frame, text="✨ 更新日期", command=self.update_date).pack(side=tk.LEFT, padx=5)
ttk.Button(button_frame, text="🗑️ 删除", command=self.delete_current).pack(side=tk.LEFT, padx=5)
def refresh_entry_list(self):
"""刷新日记列表"""
self.entry_list.delete(0, tk.END)
for date in sorted(self.entries.keys(), reverse=True):
self.entry_list.insert(tk.END, date)
def on_select(self, event):
"""选择日记时显示内容"""
if self.entry_list.curselection():
date = self.entry_list.get(self.entry_list.curselection()[0])
self.text_editor.delete(1.0, tk.END)
self.text_editor.insert(1.0, self.entries[date])
self.date_label.config(text=f"📅 {date}")
def save_current(self):
"""保存当前日记"""
content = self.text_editor.get(1.0, tk.END).strip()
if not content:
messagebox.showwarning("警告", "日记内容不能为空!")
return
date = datetime.now().strftime("%Y-%m-%d")
self.entries[date] = content
self.save_entries()
self.refresh_entry_list()
messagebox.showinfo("成功", "日记保存成功!")
def new_entry(self):
"""新建日记"""
self.text_editor.delete(1.0, tk.END)
self.date_label.config(text=f"📅 {datetime.now().strftime('%Y-%m-%d')}")
def update_date(self):
"""更新日期"""
# 简化处理,直接使用当前日期
self.entry_list.selection_clear(0, tk.END)
self.text_editor.delete(1.0, tk.END)
self.date_label.config(text=f"📅 {datetime.now().strftime('%Y-%m-%d')}")
def delete_current(self):
"""删除当前日记"""
current_date = self.date_label.cget("text").replace("📅 ", "")
if current_date in self.entries:
if messagebox.askyesno("确认", f"确定要删除 {current_date} 的日记吗?"):
del self.entries[current_date]
self.save_entries()
self.text_editor.delete(1.0, tk.END)
self.refresh_entry_list()
messagebox.showinfo("成功", "日记已删除!")
else:
messagebox.showwarning("警告", "当前没有可删除的日记!")
if __name__ == "__main__":
root = tk.Tk()
app = DiaryGUI(root)
root.mainloop()
简单的markdown格式日记
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""MD格式日记本 - 一键生成日期文件"""
import os
from datetime import datetime
class MDBasedDiary:
def __init__(self, diary_dir="diary"):
self.diary_dir = diary_dir
if not os.path.exists(diary_dir):
os.makedirs(diary_dir)
def create_today(self):
"""创建今天的日记文件"""
today = datetime.now().strftime("%Y-%m-%d")
filename = os.path.join(self.diary_dir, f"{today}.md")
if os.path.exists(filename):
print(f"⚠️ {filename} 已存在!")
return
template = f"""# {today} 的日记
## 天气
- 天气:
## 心情
- 心情:
## 今日大事记
-
## 计划完成情况
-
## 感悟与反思
-
## 明日计划
-
"""
with open(filename, 'w', encoding='utf-8') as f:
f.write(template)
print(f"✅ 已创建日志:{filename}")
print(f"📂 存放于:{os.path.abspath(filename)}")
def list_diary(self):
"""列出所有日记"""
files = sorted(os.listdir(self.diary_dir), reverse=True)
if not files:
print("📭 暂无日记")
return
print("📚 所有日记:")
for f in files:
size = os.path.getsize(os.path.join(self.diary_dir, f))
print(f" 📄 {f} ({size} bytes)")
if __name__ == "__main__":
diary = MDBasedDiary()
while True:
print("\n" + "=" * 40)
print("MD日记本 - 简单版")
print("1. ✍️ 创建今天的日记")
print("2. 📚 查看所有日记")
print("3. ❌ 退出")
print("=" * 40)
choice = input("请选择: ").strip()
if choice == "1":
diary.create_today()
elif choice == "2":
diary.list_diary()
elif choice == "3":
break
else:
print("❌ 无效输入")
使用方法
- 命令行版本:保存为
diary.py,运行python diary.py - GUI版本:保存为
diary_gui.py,运行python diary_gui.py(需要tkinter) - MD版本:保存为
md_diary.py,运行python md_diary.py
功能特点
✅ 支持写、读、删、搜日记
✅ 自动按日期保存
✅ 数据持久化存储
✅ 简单易用的界面
你可以根据需要选择最适合你的版本,或在此基础上继续添加功能(如标签、分类、统计分析等),需要调整哪个版本或有其他需求,随时告诉我!