本文目录导读:

我来帮你实现一个便签到期提醒脚本,这里提供几种不同的实现方式,从简单到复杂:
简单的命令行便签提醒(Python)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import time
import json
import os
from datetime import datetime, timedelta
class NoteReminder:
def __init__(self, notes_file="notes.json"):
self.notes_file = notes_file
self.notes = self.load_notes()
def load_notes(self):
"""加载便签数据"""
if os.path.exists(self.notes_file):
with open(self.notes_file, 'r', encoding='utf-8') as f:
return json.load(f)
return []
def save_notes(self):
"""保存便签数据"""
with open(self.notes_file, 'w', encoding='utf-8') as f:
json.dump(self.notes, f, ensure_ascii=False, indent=2)
def add_note(self, content, remind_time):
"""添加便签"""
note = {
'id': len(self.notes) + 1,
'content': content,
'remind_time': remind_time,
'created_at': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'reminded': False
}
self.notes.append(note)
self.save_notes()
print(f"✅ 便签已添加: {content}")
print(f"⏰ 提醒时间: {remind_time}")
def check_reminders(self):
"""检查是否有到期的提醒"""
current_time = datetime.now()
for note in self.notes:
if not note['reminded']:
remind_datetime = datetime.strptime(note['remind_time'], '%Y-%m-%d %H:%M')
if current_time >= remind_datetime:
print(f"\n🔔 提醒: {note['content']}")
print(f"⏰ 提醒时间: {note['remind_time']}")
note['reminded'] = True
self.save_notes()
# 删除已提醒的过期便签(可选)
self.cleanup_old_notes()
def cleanup_old_notes(self, days=1):
"""清理旧的已提醒便签"""
current_time = datetime.now()
self.notes = [
note for note in self.notes
if not note['reminded'] or
(current_time - datetime.strptime(note['created_at'], '%Y-%m-%d %H:%M:%S')).days < days
]
self.save_notes()
def list_notes(self):
"""列出所有待提醒的便签"""
pending_notes = [n for n in self.notes if not n['reminded']]
if pending_notes:
print("\n📝 待提醒便签列表:")
for note in pending_notes:
print(f" ID: {note['id']} | 内容: {note['content'][:30]}... | 提醒: {note['remind_time']}")
else:
print("✅ 没有待提醒的便签")
def main():
reminder = NoteReminder()
while True:
print("\n" + "="*40)
print(" 📋 便签提醒系统")
print("="*40)
print("1. 添加便签")
print("2. 检查提醒")
print("3. 查看便签列表")
print("4. 删除便签")
print("5. 退出")
print("="*40)
choice = input("请选择操作 (1-5): ").strip()
if choice == '1':
content = input("请输入便签内容: ").strip()
if not content:
print("❌ 内容不能为空")
continue
print("请输入提醒时间(格式: YYYY-MM-DD HH:MM)")
remind_str = input(" 2024-01-15 14:30: ").strip()
try:
datetime.strptime(remind_str, '%Y-%m-%d %H:%M')
reminder.add_note(content, remind_str)
except ValueError:
print("❌ 时间格式错误,请使用 YYYY-MM-DD HH:MM 格式")
elif choice == '2':
reminder.check_reminders()
print("\n✅ 提醒检查完成")
elif choice == '3':
reminder.list_notes()
elif choice == '4':
reminder.list_notes()
try:
note_id = int(input("请输入要删除的便签ID: "))
reminder.notes = [n for n in reminder.notes if n['id'] != note_id]
reminder.save_notes()
print(f"✅ 便签 {note_id} 已删除")
except ValueError:
print("❌ 无效的ID")
elif choice == '5':
print("👋 再见!")
break
else:
print("❌ 无效选择,请重试")
time.sleep(1)
if __name__ == "__main__":
main()
使用系统通知的版本(跨平台)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import time
import json
import os
import threading
import platform
from datetime import datetime, timedelta
class NotificationReminder:
def __init__(self):
self.notes = []
self.running = False
def send_notification(self, title, message):
"""发送系统通知"""
system = platform.system()
if system == "Windows":
# Windows 使用 win10toast 或 ctypes
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast(title, message, duration=5)
except ImportError:
# 备用方案
import ctypes
ctypes.windll.user32.MessageBoxW(0, message, title, 0x40)
elif system == "Darwin": # macOS
os.system(f"""
osascript -e 'display notification "{message}" with title "{title}"'
""")
else: # Linux
try:
os.system(f'notify-send "{title}" "{message}"')
except:
print(f"\n🔔 {title}: {message}")
def add_note(self, content, remind_time, reminder_type="once"):
"""添加便签"""
note = {
'content': content,
'remind_time': remind_time,
'reminder_type': reminder_type, # once, daily, weekly
'created_at': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'reminded': False
}
self.notes.append(note)
# 保存到文件
with open('notes.json', 'w', encoding='utf-8') as f:
json.dump(self.notes, f, ensure_ascii=False, indent=2)
self.send_notification("便签已添加", f"将在 {remind_time} 提醒: {content}")
def check_and_remind(self):
"""检查和发送提醒"""
while self.running:
current_time = datetime.now()
for note in self.notes[:]: # 使用切片创建副本
remind_time = datetime.strptime(note['remind_time'], '%Y-%m-%d %H:%M')
if current_time >= remind_time and not note.get('reminded', False):
self.send_notification("便签提醒", note['content'])
print(f"✅ 已发送提醒: {note['content']}")
if note['reminder_type'] == 'once':
note['reminded'] = True
elif note['reminder_type'] == 'daily':
# 设置为明天的同一时间
note['remind_time'] = (remind_time + timedelta(days=1)).strftime('%Y-%m-%d %H:%M')
time.sleep(30) # 每30秒检查一次
def start(self):
"""启动提醒服务"""
self.running = True
thread = threading.Thread(target=self.check_and_remind, daemon=True)
thread.start()
print("✅ 提醒服务已启动")
while True:
print("\n" + "="*40)
print(" 📋 便签提醒系统")
print("="*40)
print("1. 添加便签")
print("2. 查看便签列表")
print("3. 退出")
choice = input("\n请选择 (1-3): ").strip()
if choice == '1':
self.add_note_interactive()
elif choice == '2':
self.list_notes()
elif choice == '3':
self.running = False
print("👋 再见!")
break
def add_note_interactive(self):
"""交互式添加便签"""
print("\n📝 添加新便签")
content = input("便签内容: ").strip()
print("\n提醒类型:")
print("1. 一次性")
print("2. 每日重复")
print("3. 每周重复")
type_choice = input("请选择 (1-3): ").strip()
reminder_types = {'1': 'once', '2': 'daily', '3': 'weekly'}
reminder_type = reminder_types.get(type_choice, 'once')
remind_str = input("提醒时间 (YYYY-MM-DD HH:MM): ").strip()
try:
datetime.strptime(remind_str, '%Y-%m-%d %H:%M')
self.add_note(content, remind_str, reminder_type)
print("✅ 便签添加成功!")
except ValueError:
print("❌ 时间格式错误")
def list_notes(self):
"""列出所有便签"""
if self.notes:
print("\n📋 便签列表:")
for i, note in enumerate(self.notes, 1):
status = "✅ 已提醒" if note.get('reminded', False) else "⏳ 待提醒"
print(f"{i}. [{status}] {note['content']}")
print(f" 提醒时间: {note['remind_time']}")
else:
print("📭 暂无便签")
def main():
reminder = NotificationReminder()
reminder.start()
if __name__ == "__main__":
main()
简单的 Shell 脚本版本(Linux/Mac)
#!/bin/bash
# 便签到期提醒脚本
NOTES_FILE="$HOME/.notes.txt"
# 初始化文件
init_notes() {
if [ ! -f "$NOTES_FILE" ]; then
touch "$NOTES_FILE"
fi
}
# 添加便签
add_note() {
echo "请输入便签内容:"
read content
echo "请输入提醒时间 (格式: YYYY-MM-DD HH:MM):"
read remind_time
echo "$remind_time|$content" >> "$NOTES_FILE"
echo "✅ 便签已添加"
}
# 检查提醒
check_reminders() {
local current_time=$(date "+%Y-%m-%d %H:%M")
while IFS='|' read -r remind_time content; do
if [[ "$current_time" > "$remind_time" ]] || [[ "$current_time" == "$remind_time" ]]; then
echo -e "\n🔔 提醒: $content"
echo "⏰ 时间: $remind_time"
# 发送系统通知(如果支持)
if command -v notify-send &> /dev/null; then
notify-send "便签提醒" "$content"
elif command -v osascript &> /dev/null; then
osascript -e "display notification \"$content\" with title \"便签提醒\""
fi
fi
done < "$NOTES_FILE"
}
# 主函数
main() {
init_notes
while true; do
echo -e "\n================================"
echo " 📋 便签提醒系统"
echo "================================"
echo "1. 添加便签"
echo "2. 检查提醒"
echo "3. 查看所有便签"
echo "4. 退出"
echo "================================"
read -p "请选择 (1-4): " choice
case $choice in
1) add_note ;;
2) check_reminders ;;
3) cat "$NOTES_FILE" ;;
4) echo "👋 再见!"; exit 0 ;;
*) echo "❌ 无效选择" ;;
esac
done
}
main
使用说明
Python 脚本(推荐)
# 安装依赖(如果需要系统通知) pip install win10toast # Windows用户 # 运行脚本 python note_reminder.py
Shell 脚本
# 赋予执行权限 chmod +x note_reminder.sh # 运行 ./note_reminder.sh
功能特点
- 多种提醒方式:系统通知、命令行提示
- 持久化存储:便签保存在本地文件
- 定时检查:自动检查到期的提醒
- 重复提醒:支持一次性、每日、每周重复
- 跨平台支持:Windows、macOS、Linux
你可以根据自己的需求选择适合的版本,或者在此基础上添加更多的功能,
- 邮件提醒
- 微信提醒
- 任务优先级
- 分类管理
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播