如何用脚本实现简易日记本

wen 实用脚本 2

本文目录导读:

如何用脚本实现简易日记本

  1. 方案一:纯命令行Python版(最基础)
  2. 方案二:带GUI界面的版本(使用tkinter)
  3. 方案三:简单的markdown格式日记
  4. 使用方法
  5. 功能特点

我来帮你实现一个简易的日记本脚本,这里提供几个不同版本的实现方案:

纯命令行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("❌ 无效输入")

使用方法

  1. 命令行版本:保存为 diary.py,运行 python diary.py
  2. GUI版本:保存为 diary_gui.py,运行 python diary_gui.py(需要tkinter)
  3. MD版本:保存为 md_diary.py,运行 python md_diary.py

功能特点

✅ 支持写、读、删、搜日记
✅ 自动按日期保存
✅ 数据持久化存储
✅ 简单易用的界面

你可以根据需要选择最适合你的版本,或在此基础上继续添加功能(如标签、分类、统计分析等),需要调整哪个版本或有其他需求,随时告诉我!

抱歉,评论功能暂时关闭!